競技プログラミング日記

主に AtCoder の記事です

AtCoder Regular Contest 145B

ARC145B

とりあえず, \(A,B\) の大小で場合分けする. もしかしたら,場合分けは不要かもしれないけど. 今ある石の個数を \(s\) とおく.

Case 0 : \(A \leq B\)

  • \(s \geq A\) のとき,Alice は取れるだけ取れば 残りは \(r < A\) 個残るので,仮定\(A \leq B\) より Alice の勝ち.
  • \(s < A\) のとき,Alice は取れないので負け.



Case 1 : \(A > B\)

  • \(s \geq A\) のとき,Alice は取れるだけ取るしかない. なぜなら,少なく取ってしまうと,Bob にとって Case 0 における勝ちパターンに 入ってしまうから.
    Alice が取れるだけ取ったとする. このとき残りは \(r = s % A\) 個であり,Bob が勝つかは Case 0 に帰着. すなわち, \(r < B\) のとき Alice が勝ち, \(r \geq B\) のとき Alice が負ける.
  • \(s < A\) のとき,Alice は取れないので負け.



まとめ

  • \(s < A\) のとき,Alice は負け.
  • \(s \geq A\) のときは,Alice は取れるだけ取るのが最善. このとき,残りの個数は \(r = s % A\) になり,
    • \(r < B\)
    • なら Alice の勝ち,
    • \(r \geq B\)
    • なら Alice の負け.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"