mexmans's blog

By mexmans, 13 years ago, In Russian
1) Задача
Двое играют в следующую игру:
В ряд выстроены N белых камней, за один ход разрешается перекрасить один белый камень в черный, если соседние камни белые, проигрывает тот кто не может совершить ход.
2) Что я делаю? 
Пишу рекурсивную функцию подсчета функций Гранди, следующим образом:
если N = 0 то ответ очевидно 0 иначе
если N <= 3 то сопоставляю ним-число 1 (Выигрышная позиция) иначе
создаю пустое множество A
Запускаю цикл i от 1 до N если перекрасить i ый камень то мы придем в состояние из двух независимых игр меньшей размерности i - 2 и n - i - 1, считаю для каждой из них функцию Гранди и добавляю в множество A исключающее или двух полученных значений функции, обрабатывая граничные случаи.
Нахожу из данного множества минимальное неотрицательное число не встречающееся в нем. Возвращаю ответ.
3) Некоторые тесты
    4 проигрышная позиция (ок)
    5,6,7 выигрышная позиция (ок)
    8 проигрышная позиция (на что моя программа возвращает неверный результат) 
4) Что-то я делаю не правильно. Подскажите как можно свести эту игру к ним-игре и/или подскажите ошибку в моих рассуждениях. Спасибо.
  • Vote: I like it
  • +9
  • Vote: I do not like it