公式

D - Devourers and Cake 解説 by camypaper


\(N,M\) の偶奇に応じて場合分けして考えます。

1. \(N,M\) が奇数のとき

中央のマスが 0 ならば後手必勝です。
後手は先手が食べた側と反対側のピースを食べることで常に中央のマスを 0 にすることができます。

また、中央の縦 \(3\) マス、あるいは横 \(3\) マスが 010 のときも後手必勝です。
先手が行、列を初めて食べたときに先手が食べた側と同じ側を食べることで中央のマスを 0 にすることができ後手必勝となります。

それ以外の場合は1ステップシミュレーションすることで後述する \(N,M\) のちょうど一方が奇数のときに帰着することにします。

2. \(N,M\) のちょうど一方が奇数のとき

\(N\) が奇数として一般性を失いません。
中央 \(2\) マスのいずれかが 1 のとき先手必勝です(\(N,M\) が奇数のときの中央のマスが 0 のときと同様です)。

また、中央 \(2\) 列のうち、いずれかについて縦 \(3\) マスが 101となっているとき先手必勝です(\(N,M\) が奇数のときの縦 \(3\) マスが 010 のときと同様です)。

それ以外の場合は後手必勝です。
このとき、中央 \(2\) マスが 00 で、中央 \(2\) 列のうち、どちらも縦 \(3\) マスが 101となってはいません。
後手の戦略としては基本的には先手が食べた側の反対側を食べればよいです。
このとき、先手の動きに応じて以下のどちらかが起こります。

  • 列を選んで食べるしかできなくなったとき、中央 \(2\) マスが 00 である盤面で先手に手番を渡すことができ、後手必勝です。
  • 行を選んで食べるしかできなくなったとき、中央 \(2\) 列のうち、どちらも縦 \(3\) マスが 101 でなかったことからやはり中央 \(2\) マスが 00 である盤面で先手に手番を渡すことができ、後手必勝です。

3. \(N,M\) どちらも偶数のとき

1ステップシミュレーションを行うことで \(N,M\) の一方のみが奇数の場合に帰着できます。

上記をまとめるとこのゲームは中央付近のみで決まることがわかります。 ゲームの勝敗判定は \(O(1)\) で可能で入力を受け取る部分が \(O(NM)\) かかりこちらがボトルネックとなります。

投稿日時:
最終更新: