はじめに
こんばんは。tax_freeです。午前中は英検を受けて来て、午後はABCを解くという日でした。英検を受験したせいで、日曜日感がゼロで疲れがmax。前回からレートが17上がりました。
今回のABCは簡単だったのでは。でもできなかった。言い訳させてください。コンテスト中にお腹を壊してトイレに入ってました。みんなは、コンテスト前にヨーグルト食べたり、豚骨ラーメン食べたり、体冷したりしないように気を付けてください。
A問題
考えたこと
HをAで割っていって0より小さくすればいいので、Hが何回Aで割り切れるかを計算すればよい。割り切れない時の場合分けに注意。
h, a = map(int,input().split())
if h % a != 0:
print(int(h/a)+1)
else:
print(int(h/a))
###B問題
問題
考えたこと
使える魔法を全て足した威力が、モンスターの体力をこえていればいい。
h, n = map(int,input().split())
a = list(map(int,input().split()))
damage = 0
for i in range(0,n):
damage += a[i]
if damage < h:
print('No')
else:
print('Yes')
###C問題
問題
考えたこと
必殺技は確定でモンスターの体力を0にできるので、体力が多いモンスターに打ったほうが効果的。
なので、モンスターの体力順にsortして必殺技を打てる回数分、先頭から0にしている。
そのあとは、0ではないモンスターの体力の合計を計算すればよい。
n, k = map(int,input().split())
h = list(map(int,input().split()))
h.sort(reverse=True)
for i in range(0,min(k,len(h))):
h[i] = 0
hp = 0
for j in range(k,n):
hp += h[j]
print(hp)
D問題
Cが終わった後にトイレに行っていたので、ここで大幅タイムロスが生れました()
それに加えて普通に考えるのに時間がかかった。
考えたこと
モンスターの体力Hが何回2で割ることができるかを計算しました。
Hを2で割るとHの個数は2倍に増えるということを考えると、n回目は$2^{n-1}$です。後は実装するだけです。
import math
h = int(input())
hp = h
c = 0
ans = 0
while hp > 1:
hp = math.floor(hp/2)
c += 1
for i in range(0,c+1):
ans += 2 ** i
print(ans)
math.floorはフロアー関数のことで、ガウス記号と同じ意味です。
###まとめ
体調には気をつけようね。悔しいのが、A~D完の人で提出が40分遅れると同じ点数でも2000位くらい差がついていたことです。次回のABCもA~C、A~Dを目指してがんばります。
では、おやすみなさい。