AtCoder AGC 063 A - Mex Game (緑色, 300 点) - けんちょんの競プロ精進記録

けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder AGC 063 A - Mex Game (緑色, 300 点)

考察に時間をかけすぎた

問題概要

文字 'A' と 'B' のみからなる長さ  N+1 の文字列  S が与えられる (先頭の文字を 0 文字目とする)。各  k = 1, 2, \dots, N について、次の問に答えよ。


Alice と Bob が交互に、以下の操作を合計  k 回行う。Alice が先手である。なお、最初は集合  X は空集合であるとする。

「好きな非負整数  x を選び、集合  X X \cup \{x\} に置き換える」

 k 回の操作が終了した状態で  m = \mathrm{mex}(X) として、 S_{m} = 'A' ならば Alice の勝ち、 S_{m} = 'B' ならば Bob の勝ちとする。

双方最善を尽くした場合に、どちらが勝つかを求めよ。


制約

  •  1 \le N \le 2 \times 10^{5}

考えたこと

最初に思ったことは、最後の手を打てる方がかなり有利だということ。というのも、その場にとどまるか、前へ進ませるかを選べるからだ。

しかし、ラストターンの直前の mex が m だったとして、m + 1, m + 2 などを仕込んでおくことで、ラストターンの人が m を入れたとしても、入れなかったとしても、ラストターンでない人が勝てる場合もあることに気がついた。

そして単純に、


  • Alice は、毎ターン、 S_{i} = 'B' であるような  i を集合  X に入れていくのがいい
  • Bob は、毎ターン、 S_{i} = 'A' であるような  i を集合  X に入れていくのがいい

ということがわかった。どんな順番で  i を入れていくのがいいのか、最初はよくわからなかったけど、結局添字が小さい方から  X に入れていけばよいとなった。

あとはシミュレーションしていけば OK

コード

atcoder.jp