競プロ日和

競技プログラミングを楽しむ

みんなのプロコン 2019 C

問題

選べるパターンは2つ

①ビスケットを1枚増やす

②ビスケットA枚をB枚に交換する(2回分の操作)

②の場合は、得られるのは次の3パターン

  1. B - A < 2

    この場合は①よりも少なくなるので①を選択

  2. B - A == 2

    この場合は①と同じになるので①を選択

  3. B - A > 2

    この場合は①よりも多くなるので、②を選択

①を選ぶ場合は、k + 1個のビスケットが得られる。

②の場合は、

  1. まずはビスケットをA枚に増やす(a - 1回)
  2. ②は2回分の操作のため、(k - a + 1) / 2回行える。得られるビスケットはB - A枚。
  3. 2を行った後にkが1回残っていた場合は①を行い、ビスケットを1枚得る。
def solve():
    k, a, b = map(int, input().split())
    if a > b - 2:
        return k + 1
    k -= (a - 1)
    return a + (b - a) * (k // 2) + (k & 1)
print(solve())