1
1

More than 3 years have passed since last update.

PythonでABC153のA~Dを解く

Last updated at Posted at 2020-01-26

はじめに

こんばんは。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を目指してがんばります。
では、おやすみなさい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1