AtCoder ABC168
AtCoder ABC168解いた分だけまとめ。
ABC3完。C問題で10年ぶりくらいに余弦定理出てきて吹いた。
目次
A. ∴ (Therefore)
問題文に従ってif文で場合分けするだけ。
入力を文字列で受けとり、スライスn[-1]
して最後の文字を見て場合分け
ACしたコード
# coding:utf-8 n = input() if n[-1] == '2' or n[-1] == '4' or n[-1] == '5' or n[-1] == '7' or n[-1] == '9': print('hon') elif n[-1] == '0' or n[-1] == '1' or n[-1] == '6' or n[-1] == '8': print('pon') else: print('bon')
B. ...(Triple Dots)
やるだけ。文字列の長さを取っておいて、比較する。
スライスと文字列の結合ができればおしまい。
ACしたコード
実際提出したのは n = len(s)
を事前に取ってからやってたけど、
セイウチ演算子でもできるので後で直しました。
# coding:utf-8 k = int(input()) s = input() if (n := len(s)) <= k: print(s) else: print(s[0:k] + '...')
C. :(Colon)
ここに来て余弦定理が出てきた。
まず、時計が出てくる問題で基本となることから。
以下の条件を加味して、分針と時針のつくる角度を求める。
- 今回の問題の場合、時針と分針どちらが長いとは書いてない。
- 時針は0.5°/分、分針は6°/分ずつ動く
- 時針は1時間で30°動く
- 今回分針と時針の作る角度は、小さい方の角度を求める
- 余弦定理を使って答えを求めることができる
ポイント
- 度→ラジアンへの変換はmath.radians()
ACしたコード
# coding:utf-8 import math a, b, h, m = map(int, input().split()) md = m // 5 md_min = m % 5 th = abs((30 * h + 0.5 * m) - (m * 6)) theta = min(th, 360 - th) # print(theta) ans = (a ** 2 + b ** 2 - 2 * a * b * math.cos(math.radians(theta))) ** 0.5 print(ans)