【ABC183 B】「Billiards」を解く【Python3】

「AtCoder」解説一覧へ

2次元平面上でビリヤードをしたとき、(Sx, Sy)にある球が(Gx, Gy)を通過させるためには、壁となっているx軸のどこを狙えばいいのか、求める問題です。

提出
sx, sy, gx, gy = map(int, input().split())
print((sx*gy+sy*gx)/(sy+gy))

目標地点(Gx, Gy)を反転すると、(Sx, Sy)との直線になることが分かります。

この直線とx軸の交点が答えになります。

上の図から、SyとG’yの長さが「1 : 2」となっていることがわかります。

直線とx軸の交点をAとすると、左右の三角形は相似であるので、同じように「A-Sx : Gx-A = 1 : 2」となります。

これらのことから、

A-Sx : Gx-A = Sy : Gy
A = (Sx × Gy + Sy × Gx)/(Sy + Gy)

となるので、この計算結果を出力します。

【ABC183】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です