Как искать закономерность
Значения Гранди почти никогда не выводят — их считают перебором, смотрят на таблицу и угадывают. Как это делать не наугад.
3 мин
В олимпиадной задаче про игру редко просят доказательство. Просят число при — а значит нужна формула. Стандартный путь такой.
- Написать честный перебор с запоминанием и напечатать значения Гранди для .
- Посмотреть на строку и угадать.
- Проверить гипотезу перебором на больших значениях.
- Написать решение по формуле.
Третий шаг пропускать нельзя: угаданное на сотне значений регулярно ломается на тысяче.
Что обычно оказывается
Период. Для игры вычитания — когда из кучи разрешено брать элемент фиксированного множества — последовательность Гранди всегда периодична, потому что значение зависит только от предыдущих. Периоды, посчитанные перебором до 20 000:
| множество | Гранди для | период |
|---|---|---|
| 0123012301230123 | 4 | |
| 0011200112001120 | 5 | |
| 0101232010123201 | 7 | |
| 0101232301012323 | 8 | |
| 0001112223000111 | 10 | |
| 0101012323201010 | 11 | |
| 0011021322031001 | 22 |
Все семь периодов начинаются с нуля, но так бывает не всегда: у некоторых множеств вначале есть непериодический кусок, и искать надо пару (предпериод, период).
Заметьте, что период не выражается через просто: у он 10, а у — 22. Поэтому его не выводят, а измеряют.
Рекуррентная формула. Игра «разрезать кусок длины на две части и оставить бо́льшую», то есть переход в любое с , даёт последовательность
Здесь виден не период, а рекуррентность: значения на чётных местах — просто половина номера, а на нечётных повторяют начало последовательности.
Сверено с перебором для всех — совпадает.
Как искать период программой
Посчитайте значения до какого-нибудь запаса (скажем, до 20 000) и переберите пары (начало, длина), проверяя совпадение до конца массива.
Единственная ловушка: период надо подтверждать на длинном хвосте. Если разрешить периоду начинаться у самого конца массива, найдётся мусорное совпадение на двух-трёх элементах. При первой попытке посчитать таблицу выше у множества так и получилось: слабая проверка выдала «период 2 с позиции 396», а настоящий ответ — период 11 с самого начала.
Требуйте, чтобы найденный период держался хотя бы на четверти массива.
Когда закономерности нет
Бывает и так — тогда либо ограничения маленькие и хватает перебора, либо игра решается не через Гранди вовсе. Признаки второго: ход меняет несколько частей позиции сразу, ходы игроков различаются, есть бесконечные партии.