AtCoder ABC 207 B – Hydrate Python解説

スポンサーリンク

Hydrate

水色のボールが A 個容器に入っています。高橋くんはこの容器に対し、以下の操作を 0 回以上好きなだけ繰り返します。
水色のボール B 個と赤色のボール C 個を容器に追加する。
高橋くんの目標は、容器に入っている水色のボールの個数が赤色のボールの個数の D 倍以下になるようにすることです。
目標が達成可能かを判定し、可能なら必要な操作回数の最小値を求めてください。

AtCoder Beginner Contest「Hydrate」

水色のボールA個に水色のボールをB個と赤色のボールC個を足し、水色のボールが赤色のボールの個数のD倍以下になるかを調べます。

次にループの回数を決めましょう。今回の問題はA + Bx <= Cx * Dと表されます(xは試行回数)。この式を変形させるとx の値は A / (CD – B)となり、xの値はA以下になることがわかります。

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

light_blue = a
red = 0

for i in range(1, a+1):
    light_blue += b
    red += c
    if light_blue <= red * d:
        print(i)
        break
else:
    print(-1)
        

ループ回数が決まったので操作をしていきます。水色のボールをlight_blueに、赤色のボールをredに入れ、ループするたびにlight_blueにボールをb個足し、redにボールをc個たしていきます。
light_blue <= red * dが満たされれば操作回数を出力し、条件が満たされなければ-1を出力して完了です。