[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}

となります。

コード