AtCoder ABC153
AtCoder ABC153解いた分だけまとめ。
今回はけものフレンズじゃないですかもう笑
結果はABC3完、Dは解説ACです。再帰で良かったのか...
レートまたやや冷えで悲しい。
目次
解説AC
A. Serval vs Monster
体力を攻撃分で割る。答えは切り上げになる。
ポイント
- 切り上げの書き方。
-(-x // y)
- 切り捨ては
x // y
ACしたコード
#coding:utf-8 h, a = map(int, input().split()) #切り上げ print(-(-h//a))
B. Common Raccoon vs Monster
必殺技でしか攻撃できないので、必殺技の合計値と体力を比較し、
その結果で場合分けする。
必殺技の合計が体力より小さければ、同じ技を使うことになる。
ACしたコード
#coding:utf-8 h, n = map(int, input().split()) a = list(map(int, input().split())) if h <= sum(a): print('Yes') else: print('No')
C. Fennec vs Monster
モンスターの体力が高い順にソートする。
体力が高いk番目のモンスターまでに必殺技を使い、
使わなかった分のモンスターの体力の和が通常攻撃で倒すことになる。
ACしたコード
#coding:utf-8 n, k = map(int, input().split()) h = list(map(int, input().split())) h_sort = sorted(h, reverse=True) print(sum(h_sort[k:]))
D. Caracal vs Monster
ここから解説AC。再帰関数で実装する。
ポイント
- 再帰関数の使用
- ⌊X⌋(xの床)を表すのに
math.floor
を使う
ACしたコード
#coding:utf-8 import math def caracal(h): if h == 1: return 1 else: return 2*caracal(math.floor(h/2)) + 1 if __name__ == "__main__": h = int(input()) print(caracal(h))