Ним и функция Гранди
Почему в задачах про игры внезапно появляется XOR: значения Гранди, mex и сумма игр.
2 мин
Есть класс игр, которые решаются полностью и одинаково: двое ходят по очереди, ходы обоих одинаковы, информация полная, случайности нет, проигрывает тот, кто не может сходить.
Для таких игр каждой позиции приписывают число — значение Гранди:
где — наименьшее неотрицательное число, которого нет в множестве.
Позиция проигрышная для того, кто ходит, тогда и только тогда, когда её значение равно нулю. Это прямо следует из определения: из нулевой позиции все ходы ведут в ненулевые, а из ненулевой есть ход в нулевую.
Сумма игр
Главная теорема (Шпрага — Гранди): если играют одновременно в несколько независимых игр и ход состоит в том, чтобы сходить в одной из них, то
Вот откуда в задачах про игры берётся исключающее «или».
Ним
В ниме есть кучи камней, ход — взять сколько угодно камней из одной кучи. Значение Гранди кучи из камней равно : из неё достижимы кучи , и этого множества равен .
Значит, позиция из куч проигрышная ровно тогда, когда .
Для двух куч отсюда получается таблица, в которой на пересечении строки и столбца стоит . Проверено перебором: на всех клетках при значение по строке и столбцу совпало с без единого исключения.
Эта же таблица встречается в задачах, где её описывают геометрически: «точке приписывается наименьшее число, отсутствующее в её строке и столбце». Ответ — .
Как решать задачу про игру
- Проверить, что игра из нужного класса: ходы симметричны, случайности нет, проигрывает тот, кто не может сходить.
- Разложить позицию на независимые части.
- Посчитать значения Гранди для каждой части — обычно перебором на маленьких размерах.
- Найти закономерность и проверить её перебором.
- Ответ — XOR значений.
Четвёртый шаг — обычно самый содержательный. Значения Гранди почти всегда оказываются простой функцией вроде , или количества единиц, но угадывается это по таблице, а не выводится.