はまやんはまやんはまやん

hamayanhamayan's blog

Count Balls [AtCoder Beginner Contest 158 B]

https://atcoder.jp/contests/abc158/tasks/abc158_b

解説

https://atcoder.jp/contests/abc158/submissions/10643830

先頭からN個のボール列は、
AAAABBBBAAAABBBBAAAABBBBと青ボール赤ボールのグループが最初に続く、
そして、AAAで終わるか、AAAABBとAは置ききってBで終わるかという感じになる。

グループはA+B個分になる。len=A+Bとしておく。
すると、グループの個数はN/lenとなる。
このグループの個数×Aがグループで存在するボールの個数である。

残りはN%len個となるが、青いボールはそのうち先頭のA個であるため、min(N % len, A)が残りでの青ボールの個数。

これの和が答え。

ll N, A, B;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> A >> B;

    ll len = A + B;
    ll ans = (N / len) * A + min(A, N % len);

    cout << ans << endl;
}