grundy数とNim
典型90の031で困ったので。
031 - VS AtCoder(★6)
https://atcoder.jp/contests/typical90/tasks/typical90_ae
納得できなかったので、簡単に証明をあてたり補足したり。
grundy数
いろいろと端折ってDAGから初めます。
詳細は、以下などを参照ください。
Grundy数(Nim数, Nimber)の理論
を頂点集合とし、 を辺集合とします。
ここで、 の元は頂点 から への辺を、 で表すものとします。
また、 で頂点 の grundy 数を表すことにします。
また、 により、集合に含まれない最小の非負整数を表すものとします。
grundy 数が で後手必勝、 より大きい値で先手必勝とします。
grundy数の性質
1. は後手必勝
2.
3. である場合、任意の に対して、 なる頂点 への辺が存在する(遷移できる)
考察1
のとき、 なる任意の に対して、 が成立する。
性質2を書き下した。
考察2
のとき、 なる任意の に対して、 が成立する。
さらに、各 に対して、 なる を選んで、 となるようにできる。
性質 2 と 3 を書き下した。
Nim
Nim の後手必勝の条件は、 であることです。
(以下、この条件を のように表します。)
ここで、 は、grundy 数です。
これを証明します。
方針
競技プログラミングでよく出てくるゲームでは相手にある状態(負けの状態)を押し付け続けることが必勝法になります。
証明
相手に、 を押し付け続けることができれば勝利できます。
特に、すべての に対して、 であれば、 であるため、この状態であれば負けています。
あとは、自分の手番において であれば、相手に押し付け続けることができることを示せば十分です。
これは、grundy数の性質の 3. から grundy数をそれより小さい、任意の数字にできることから分かります。
また、 の性質から、 に操作を行ったとき、必ず となります。
補足
でも、ある と頂点 が存在して、 と、 となることがあります。
これは、 などの場合に発生します。
なぜこれを考える必要がないのか?がこの補足です。
簡単に言うと、利点がないため必勝法において利用されることがないためです。
grundy数の性質 3. から、grundy数が大きくなるほど(元の選択肢を包含する形で)選択肢が増えます。
例えば、grundy数が 2 のときは、grundy数が 0、1 になる頂点に移動できます。
grundy数が 4 のときは、grundy数が 0、1、2、3 になる頂点に移動できます。
これは、grundy数が 2 の場合の移動先をすべて含んでいます。
相手の選択肢を増やす操作に利点がありません。
特に、grundy数はmexで十分意味を持つことも分かります。