blogskol

思わず声に出して読みたくなるブログ

ABC168 C - : (Colon)

解説放送がかなり意外な挙動をしていたので
多分同じ内容を誰か書いてるけど

C - : (Colon)
youtu.be

解説放送では
「分針はM/60周、時針は(60H+M)/720周してるので、0時から時計回りでの時針分針の角度はそれぞれ
θh= \dfrac{2πM}{60} θm= \dfrac{2π(60H+M)}{720}


「ここから余弦定理を使うと出せるんですが、覚えていないし座標を求めて距離だそうね」

「0時の方向を角度0の軸としていつも数学で使っているような方向で考えると、時針,分針の座標はそれぞれ
(Xh,Yh)=(Acosθh,Asinθh),(Xm,Ym)=(Bcosθm,Bsinθm)


三平方の定理から
ans^2=(Xh-Xm)^2+(Yh-Ym)^2
なので右辺にsqrtつけたものが答え」

って感じ

余弦定理を思い出すことなく素直に出来るので確かに楽で嬉しい
でもどうせなら0時の方向じゃなくて、今の時針の方向を角度0の軸にとった方が楽じゃ無い?
θ=θm-θh
っておくだけだから手間はかからなくて、こっちの座標なら
(Xh,Yh)=(A,0),(Xm,Ym)=(Bcosθ,Bsinθ)
となるからもうちょっと楽
で、三平方の定理から答えを上と同じように出せば終わり







ところで、



\begin{align}
ans^2 &=(Xh-Xm)^2+(Yh-Ym)^2\\
&=(A-Bcosθ)^2+(0-Bsinθ)^2\\
&=A^2-2ABcosθ+B^2cos^2θ+B^2sin^2θ\\
&=A^2+B^2-2ABcosθ(∵sin^2+cos^2=1)
\end{align}


なのでこれはもう余弦定理なんですよね
三角比の定義と三平方*1くらい知っておけば余弦定理は案外簡単に出せるんですね〜
三角比は扱いにくい「角度」の概念を割と扱いやすい「長さ」を使って表現することで色々出来て嬉しいねってのが本質だと思っていて、余弦定理は三角形さえあれば長さ⇔角度の行き来が簡単に出来るようになるから嬉しいんだよね


別に嬉しいから公式を覚えようねとは全く思っていなくて*2
(競プロに限らず)似た問題に当たった時に「長さと角度の世界を行き来したくなったら余弦定理を使うと楽だったはずだからどんな定理だったか検索しよう」って思えるようにしておきたいねと言うお話
余弦定理は形が怖くて苦手意識を持っている人が多いっぽいんだけど、楽に導けるし角度と長さを簡単に行き来出来るから便利だねと言う認識が広まって欲しい

実のところ今回の問題をプログラミングコンテストの問題として解くなら複素数で解くのが多分一番楽なんですが(かなり問題の状況にマッチした仕様が言語に色々搭載されているので)

*1:三平方の定理は本当に大事なので証明込みで知っておこうね 同じ直角三角形4つ使って正方形を作って面積を求めて見るのが楽だよ

*2:むしろ自力で導ける公式は脳が勝手に覚えるまでは毎回自力で導くくらいでいいと思う