AtCoder Beginner Contest 144 D - Water Bottle【Python】
https://atcoder.jp/contests/abc144/tasks/abc144_d
AtCoder ProblemsのRecommendationで Difficulty: 714、Solve Probability:31%でした。
図形を書いてみたところ最大まで傾けたときの水の形が側面から見て台形か三角形に分けられるため場合分けを行い、三角関数については検索しながら解きました。 水筒が満杯の場合を考慮せず一度REとなってしまったのは反省点です。
import math A, B, X = map(int, input().split()) # 最大まで傾けたときの水の形が台形の場合 if X > A * A * B / 2: # 台形の上底を求める C = 2 * X / A ** 2 - B # 水筒が満杯の場合 if B - C == 0: print(0) exit() tanth = A / (B - C) # 最大まで傾けたときの水の形が三角形の場合 else: # Bを底としたときの三角形の高さを求める C = 2 * X / (A * B) tanth = C / B print(90 - math.degrees(math.atan(tanth)))