Знакома задача, когда требуется определить кто выйграет в такую странную игру: даны несколько кучек камней, каждый игрок по очереди берет какое-то количество (не менее одного) камней из любой кучки, взявший последний камень - победитель? Это классическая игра, которая называется Normal Nim. Задач на Nim огромное количество и решаются они очень просто: нужно найти ним-сумму игры. Ним-сумма - сума по модулю два чисел Гранди для всех частей игры. В случае Nim это будет просто сумма всех размеров кучек, то есть x1 xor x2 xor x3... xor xn.
Позиция является проигрышной для первого игрока только в том случае, если ним-сумма равна 0.
Если взявший последний камень игрок проигрывает, то такую игру называют Misere Nim. Для нее проигрышные позиции те же, кроме случая, когда все кучки имеют размер 1. Тогда проигрышной является позиция с ним-суммой 1.
Вот пример задачи на Misere Nim:
http://acmicpc-live-archive.uva.es/nuev … php?p=3830
Для тех, кто читает по-английски:
http://sps.nus.edu.sg/~limchuwe/cgt/
http://en.wikipedia.org/wiki/Nim
Похожим образом можно решать другие игровые задачи. Если число возможных позиций слишком велико и мы не можем построить дерево игры, то нам необходимо для каждой позиции поля сосчитать число Гранди, которое равно 0, если отсюда нельзя сделать ход или наименьшему числу Гранди, которое нельзя достичь из этой позиции. Потом опять сумма по модулю два. Призываю поразбираться и порешать задачи на теорию игр, это нужно.
Отредактировано Ikari (2009-01-27 15:57:31)