https://atcoder.jp/contests/abc168/tasks/abc168_c
前提知識
解説
https://atcoder.jp/contests/abc168/submissions/13349960
ちょっとした幾何知識が必要。
余弦定理が想定解っぽいが、自分は回転を使って解いた。
固定する定点の座標を(0,0)とおくと、時針の先端は(0,A), 分針の先端は(0,B)のように表現できる。
H時間M分後の座標を考えてみると、
時針→時計回りに360×(H60+M)/(1260)
分針→時計回りに360×M/60
回転していることになる。
座標の回転はsin,cosで行えるので、適切にradianに変換して、座標を計算できる。
あとは、2つの座標の距離を計算すると答え。
int A, B, H, M; //--------------------------------------------------------------------------------------------------- void _main() { cin >> A >> B >> H >> M; P hour(0, A); P minute(0, B); double p; p = 1.0 * (H * 60 + M) / (12 * 60); hour = rotate(hour, 2 * PI * (1 - p)); p = 1.0 * M / 60; minute = rotate(minute, 2 * PI * (1 - p)); double ans = abs(hour - minute); printf("%.15f\n", ans); }