問題概要
問題ページ
-
B - Billiards
問題ページへ移動する
問題文
高橋君は \(2\) 次元平面上でビリヤードをしています。\(x\) 軸は壁になっており、球をぶつけると入射角と反射角が等しくなるように球が跳ね返されます。
いま高橋君の球が \((S_x,S_y)\) にあります。ある座標を狙って球を撞くと、球はその座標へ向かって直線的に転がっていきます。
\(x\) 軸で球をちょうど \(1\) 回反射させたのち、\((G_x,G_y)\) を通過させるためには、\(x\) 軸のどこを狙えば良いでしょうか?
制約
- \(-10^6 \leq S_x, G_x \leq 10^6\)
- \(0 < S_y, G_y \leq 10^6\)
- \(S_x \neq G_x\)
- 入力はすべて整数
問題の考察
数学の比で計算することができる問題。
\(S_x:G_x = S_y:G_y\)
\(S_x \times G_y=G_x \times S_y\)
ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
a, b, c, d = list(map(int, input().rstrip('\n').split()))
if a > c:
a, b, c, d = c, d, a, b
print(a + b * (c - a) / (b + d))
if __name__ == '__main__':
solve()