ABC144D Water Bottle

はじめに

カテゴリー競プロ初中級者100問では、Qiitaにて@e869120さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPythonで解いています。

全問題の一覧はこちらです

問題

https://atcoder.jp/contests/abc144/tasks/abc144_d

方針

数式変形をして溢れる直前の傾きを求めます。ただし、水の体積が水筒の最大容量の半分を超えるかどうかで条件分岐が必要です。

溢れる直前の角度はarctanで計算します。Pythonの場合はmath.atanを用いると良いでしょう。またmath.degreesでラジアンから度数法に変換します。

コード

1
2
3
4
5
6
7
8
import math
a,b,x = map(int,input().split())
if x < a**2*b/2:
y = 2*x/(a*b)
print (math.degrees(math.atan(b/y)))
else:
y = 2*(b-x/(a**2))
print (math.degrees(math.atan(y/a)))

記事情報

  • 投稿日:2020年5月16日
  • 最終更新日:2020年5月16日