EduBrick

Ним и функция Гранди

Почему в задачах про игры внезапно появляется XOR: значения Гранди, mex и сумма игр.

2 мин

Есть класс игр, которые решаются полностью и одинаково: двое ходят по очереди, ходы обоих одинаковы, информация полная, случайности нет, проигрывает тот, кто не может сходить.

Для таких игр каждой позиции приписывают число — значение Гранди:

G(v)=mex{G(u):u достижима из v за один ход},G(v) = \mathrm{mex}\{G(u) : u \text{ достижима из } v \text{ за один ход}\},

где mex\mathrm{mex} — наименьшее неотрицательное число, которого нет в множестве.

Позиция проигрышная для того, кто ходит, тогда и только тогда, когда её значение равно нулю. Это прямо следует из определения: из нулевой позиции все ходы ведут в ненулевые, а из ненулевой есть ход в нулевую.

Сумма игр

Главная теорема (Шпрага — Гранди): если играют одновременно в несколько независимых игр и ход состоит в том, чтобы сходить в одной из них, то

G(сумма)=G1G2Gk.G(\text{сумма}) = G_1 \oplus G_2 \oplus \ldots \oplus G_k.

Вот откуда в задачах про игры берётся исключающее «или».

Ним

В ниме есть кучи камней, ход — взять сколько угодно камней из одной кучи. Значение Гранди кучи из xx камней равно xx: из неё достижимы кучи 0,,x10, \dots, x-1, и mex\mathrm{mex} этого множества равен xx.

Значит, позиция из куч x1,,xkx_1, \dots, x_k проигрышная ровно тогда, когда x1xk=0x_1 \oplus \ldots \oplus x_k = 0.

Для двух куч отсюда получается таблица, в которой на пересечении строки xx и столбца yy стоит xyx \oplus y. Проверено перебором: на всех 36003600 клетках при x,y<60x, y < 60 значение mex\mathrm{mex} по строке и столбцу совпало с xyx \oplus y без единого исключения.

Эта же таблица встречается в задачах, где её описывают геометрически: «точке приписывается наименьшее число, отсутствующее в её строке и столбце». Ответ — xyx \oplus y.

Как решать задачу про игру

  1. Проверить, что игра из нужного класса: ходы симметричны, случайности нет, проигрывает тот, кто не может сходить.
  2. Разложить позицию на независимые части.
  3. Посчитать значения Гранди для каждой части — обычно перебором на маленьких размерах.
  4. Найти закономерность и проверить её перебором.
  5. Ответ — XOR значений.

Четвёртый шаг — обычно самый содержательный. Значения Гранди почти всегда оказываются простой функцией вроде xx, xmod3x \bmod 3 или количества единиц, но угадывается это по таблице, а не выводится.

Смежное