Official

I - ほくろ/Nevus Editorial by sugarrr


ホクロ \(1\) つあたり \(O(1)\) で計算できれば、この問題全体を \(O(N)\) で解くことができ、十分高速です。これは、「\(\vartriangle ABC\) に平行移動と回転移動を施して \(\vartriangle A'B'C'\) に移動した。\(C\) 以外の座標が与えられるので、\(C\) の座標を求めよ。」という問題と等価です。
いくつかの解法が考えられますが、複素数を用いた解法を紹介します。\(A(\alpha), B(\beta), C(\gamma), A'(\alpha'), B'(\beta'), C'(\gamma')\) とします。
\(\frac{\gamma - \alpha}{\beta - \alpha} = \frac{\gamma' - \alpha'}{\beta' - \alpha'}\) が成り立つので、
\(\gamma =\alpha + \frac{(\beta - \alpha)(\gamma' - \alpha')}{\beta' - \alpha'}\) となります。
例えばC++であれば、complexクラスを用いて簡潔に実装できます。

posted:
last update: