[AtCoder] ABC 183 B – Billiards
問題
方針
点 \( (S_x, S_y) \) と 点 \( (x, 0) \) を通る直線の傾きを \( a_1\) とし、点 \( (G_x, G_y) \) と 点 \( (x, 0) \) を を通る直線の傾きを \( a_2\) とすると、
\begin{eqnarray}
a_1&=& \dfrac{S_y}{S_x – x}\\\
a_2 &=& \dfrac{G_y}{G_x – x}\
\end{eqnarray}
となります。入射角と反射角が等しいことから、\( a_1 = -a_2 \) となることが分かります。したがって、
\begin{eqnarray}
a_1&=& -a_2 \\
\dfrac{S_y}{S_x – x} &=& -\dfrac{G_y}{G_x – x}\\
x &=& \dfrac{S_xG_y + S_yG_x}{S_y + G_y}
\end{eqnarray}
となります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { double sx, sy, gx, gy; cin >> sx >> sy >> gx >> gy; double x = (sy * gx + sx * gy) / (sy + gy); printf("%.8f\n", x); return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません