BoB005-F: Power of 2 Battle

2 secs 1024 MB
kyaneko999's icon kyaneko999

解説

結論から言うと,XX33 の倍数ならば Bob さんが勝ち,そうでなければ Sakky さんが勝ちます.

XX33 の倍数でないとき,Sakky さんが勝つことを示します.
以下のような戦略を取ることで Sakky さんは必ず勝利することができます.なお,合同式は 33 を法として考えます.

  • Sakky さんは X1X\equiv 1 のとき k=0k=0X2X\equiv 2 のとき k=1k=1 を選んで操作を行う.書き換えた後の YY は必ず Y0Y\equiv0 を満たす.
  • Bob さんは Y0Y\equiv0 から操作を行うことになる.Y=0Y=0 ならば Bob さんの負けである.
    Y>0Y>0 のとき,どのように操作をしても書き換えた後の YYY≢0Y\not\equiv0 を満たす.
  • Sakky さんは Y≢0Y\not\equiv0 から操作を行うことになる.最初と同様,Y1Y\equiv 1 のとき k=0k=0Y2Y\equiv 2 のとき k=1k=1 を選んで操作を行う.
  • 以下同様

すなわち,上記の戦略によって,Sakky さんは必ず Y≢0Y\not\equiv0 から操作を始め Bob さんは必ず Y0Y\equiv0 から操作を始めることになります.
敗北するのは Y=0Y=0 から自分の操作を始めるときであり,これは必ず Bob さんの手番に回ってくることになります.
したがって,Sakky さんは必ず勝利することができます.

逆に XX33 の倍数のときは,同じ戦略を Bob さんにやり返されてしまうため Sakky さんは負けることになります.

コンテスト中に証明まで思いつくのは難しいですが,XX の値が小さい時の結果を(Grundy数の計算やシミュレーションによって)列挙することで答えを閃くことは可能です.

解答例(Python)