競プロ典型90問:018 - Statue of Chokudai(★3)
問題
https://atcoder.jp/contests/typical90/tasks/typical90_r
挑戦結果
- 結果:解けた
- 時間:40分ぐらい
考えたこと
- 俯角とはなにかを調べた
- 数式一発な問題と思った
- E869120 君の座標(x,y,z)の計算式を求めた
- 高橋直大像との俯角に必要な三角形を求めた
- 点1:高橋直大像 (X,Y,0)
- 点2:E869120君の座標 (eX, eY, eZ)
- 点3:E869120君をXY平面上に落とした場所 (eX, eY, 0)
- 辺の長さから角度を求めるために、atan2を使用した
公式解説
https://twitter.com/e869120/status/1384276005330690049/photo/1
解説を読んだふりかえり
- ただ三角関数と書いてあった。数式作るだけなので、もっと早くときたいところ。
- 3次元空間を脳内か紙面上で上手に描けないと駄目だな。
ソース
from math import sin, cos, pi, atan2, degrees, sqrt T = int(input()) L,X,Y = [int(x) for x in input().split()] Q = int(input()) E = [] for _ in range(Q): E.append(int(input())) # t秒時点のE869120君の座標 def xyz(t): x = 0 y = -L/2 * sin(2*pi*t/T) z = L/2 - L/2 * cos(2*pi*t/T) return x,y,z # t秒時点の答え def ans(t): eX,eY,eZ = xyz(t) return degrees(atan2(eZ, sqrt((X-eX)**2 + (Y-eY)**2))) # print(xyz(0)) # print(xyz(T/4)) # print(xyz(T/2)) # print(xyz(3*T/4)) for e in E: print(ans(e))