AtCoder Beginner Contest 164 B

2020年4月29日

AtCoder Beginner Contest 164 B を Python で

AtCoder Beginner Contest 164 B を Python で解説していきます。
参加した感想もこちらで書いているので,もしよろしければ見てみてください。
それでは,早速解説していきます。
まずは問題文から。


B – Battle


実行時間制限: 2 sec / メモリ制限: 1024 MB×

配点 : 200 点

問題文

高橋君と青木君がモンスターを闘わせます。

高橋君のモンスターは体力が A で攻撃力が B です。 青木君のモンスターは体力が C で攻撃力が D です。

高橋君→青木君→高橋君→青木君→… の順に攻撃を行います。 攻撃とは、相手のモンスターの体力の値を自分のモンスターの攻撃力のぶんだけ減らすことをいいます。 このことをどちらかのモンスターの体力が 0 以下になるまで続けたとき、 先に自分のモンスターの体力が 0 以下になった方の負け、そうでない方の勝ちです。

高橋君が勝つなら Yes、負けるなら No を出力してください。

制約

  • 1≤A,B,C,D≤100
  • 入力はすべて整数である。

入力

入力は以下の形式で標準入力から与えられる。

A B C D

出力

高橋君が勝つなら Yes、負けるなら No を出力せよ。


入力例 1

10 9 10 10

出力例 1

No

はじめに、高橋君の攻撃で青木君のモンスターの体力が 10−9=1 になります。

次に、青木君の攻撃で高橋君のモンスターの体力が 10−10=0 になります。

高橋君のモンスターの体力が先に 0 以下になったため、高橋君の負けです。


入力例 2

46 4 40 5

出力例 2 

Yes


解説

標準入力で A,B,C,D が与えられ,A から D を引き,C から B を引いていき,最終的にどちらが先に0以下になるかという問題です。

色々と方法は考えられますが,一番単純な while を使った解き方で説明していきます。
A > 0 または C > 0 であるという条件の下で,以下の試行を順に行っていきます。

  1. C から B を引く。
  2. C ≦ 0 なら,高橋君が青木君を攻撃して青木君の体力が0以下になったので,’Yes’を出力して終了する
  3. A から D を引く。
  4. A ≦ 0 なら,青木君が高橋君を攻撃して高橋君の体力が0以下になったので,’No’を出力して終了する

この1~4の操作をずっと続けていって,最終的にどちらかの体力が負になった時点で終了すればいいです。あとはこれをコーディングしていきます。
while 文の最中で操作を終了したいときは,break を使えばよいです。
それでは,解答例に移ります。

解答例

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

while a > 0 or c > 0:
    c -= b
    if c <= 0:
        print('Yes')
        break
    a -= d
    if a <= 0:
        print('No')
        break

いかがだったでしょうか。
もしよろしければ,twitter のフォロー,いいね,RT よろしくお願いします!
こちらの励みになります😁
それでは!

他の問題も解説しているので,ぜひ見ていってください!
ABC 164 A
ABC 164 B
ABC 164 C
ABC 164 D