【ABC164 B】「Battle」を解く【Python3】

「AtCoder」解説一覧へ

高橋君の体力A・攻撃力Bのモンスターと、青木君の体力C・攻撃力Dのモンスターを戦わせたときに高橋君が勝つかどうかを求める問題です。

提出
a, b, c, d = map(int, input().split())

while a > 0 and c > 0:
    c -= b
    a -= d

if c <= 0:
    print("Yes")
else:
    print("No")

while文を使って、どちらか(もしくは両方)の体力が0になるまで、攻撃で体力を減らしていきます。

その後に、どちらが勝ったのかを判定します。

高橋君のほうが先に攻撃するため、青木君のモンスターの体力Cが0以下であれば、高橋君の勝ちになります。

split()メソッド

split()メソッドは、区切り文字を指定して、文字列を分割します。

区切り文字を指定しない場合、空白、タブ、改行で分割されます。

str.split("区切り文字")

map()関数

map()関数は、イテラブル(リストやタプルなど)の各要素に関数の処理を適用します。

map(関数、イテラブル)

一回ずつ攻撃する方法のほか、どちらの体力が先に減るのかを計算で求めることもできます。

提出
a, b, c, d = map(int, input().split())

if -(-c//b) <= -(-a//d):
    print("Yes")
else:
    print("No")

それぞれのモンスターが何回の攻撃で体力0以下になるかどうかを調べます。

攻撃力は毎回同じなので、「体力÷攻撃力」の切り上げでその回数が分かります。

切り捨てだと、攻撃力以下の体力が残っている可能性があります。

//は切り捨て除算です。Python3では、「-(-c//b) 」のように書くと切り上げになります。

【ABC164】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です