AtCoder ABC 158 B – Count Balls Python解説

スポンサーリンク

Count Balls

高橋君は青と赤の 2 色のボールを持っており、これらを一列に並べようとしています。
初め、列にボールはありません。
根気のある高橋君は、次の操作を 10 ^100 回繰り返します。列の末尾に、A 個の青いボールを加える。その後、列の末尾に B 個の赤いボールを加える。
こうしてできる列の先頭から N 個のボールのうち、青いボールの個数はいくつでしょうか。

AtCoder Beginner Contest 「Count Balls」

A個の青いボールとB個の赤いボールを足してひとつのグループと考える。
N個のボールを青いボールと赤いボールのグループで割れば、割ったときの商と余りで青いボールの数を計算できる。

n, a, b = map(int, input().split())

cnt = 0

cnt += n // (a + b) * a

rem = n % (a + b)

cnt += min(rem, a)

print(cnt)

先述した通り、n // (a + b) * aでN個のボールを割ったときの商*グループ内の青いボールの数を計算。
余ったボールは青いボールから始まるので、余ったボールの数と青いボールの数の小さい方を足して完了です。