見出し画像

ABC168 C問題 [数学知識]

要約

時計を題材にした問題.H時M分のとき時計の端と端の距離はいくらになるかという問題だった.問題を見た瞬間同じ円周上を回り続けるので極座標を使って行けば良いことに気づいた.模範解答は余弦定理を使っていたが私は2点間距離の公式を用いた.長針,短針の各座標を求めればよいので数Bの知識を持ってこればよい

画像1

上の図の用に,三角比を用いてある点は(Acosθ, Asinθ)と表せる.

画像2

今回は始点が真上のy座標上の点である.そのためθをこのようにy座標から時計回り方向に定義すればある点は(Asinθ, Acosθ)と表せる.

ここで,後は長針,短針の角度が求めれれば良い.

短針は60分で一周なので,単純にM/60(度) = 2π*M/60(rad)となる.

ここで長針も脳死でH/12(度)と求めていたため一度答えが合わなかった.

実際の時計を想像すれば分かるように短針が動いている間長針も動いているのでその分を考慮しなければ行けない.実際には全部で60*12等分した分をM分追加で進むので,H/12 + M/720 (度)となる.

A, B, H, M = map(int, input().split())
import math
#時針は分針が動いているときにも回っている
theta_A = 2*math.pi*(H/12 + M/720)  
theta_B = 2*math.pi*M/60
#print(math.degrees(theta_A), math.degrees(theta_B))
a = [A*math.sin(theta_A), A*math.cos(theta_A)]
b = [B*math.sin(theta_B), B*math.cos(theta_B)]
#print(a,b)
l = math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)
print(l)

この記事が気に入ったらサポートをしてみませんか?