ACM - Псков

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ACM - Псков » Алгоритмы » Nim


Nim

Сообщений 1 страница 7 из 7

1

Знакома задача, когда требуется определить кто выйграет в такую странную игру: даны несколько кучек камней, каждый игрок по очереди берет какое-то количество (не менее одного) камней из любой кучки, взявший последний камень - победитель? Это классическая игра, которая называется 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)

2

Можно добавить ещё, что в значениях функции Гранди очень часто можно найти закономерность.
Поэтому в задачах, в которых ограничения не позволяют явно вычислить функцию Гранди, строим табличку для небольших N и сидим вкуриваем :)

3

Скинте пожалуйста сюда линки на задачи на эту тему.

4

http://acm.timus.ru/problem.aspx?space=1&num=1465

Довольно классическая задача на нахождение закономерности в значениях функции Гранди.

5

Вот задачка на Гранди неплохого уровня (сначала не совсем тривиальное сведение к теории Гранди, затем ещё закономерности нужно вывести все):
acm.sgu.ru #328 (a coloring game)

6

Ещё у меня есть на бумажке несколько задачек на теорию Гранди, могу здесь привести.

Будем считать "стандартным нимом" игру двух равноправных независимых игроков, когда есть N<=10^5 кучек, в каждой по Ai<=10^18 камней. За один ход игрок может взять из одной кучки любое количество камней. Выигрывает тот, после чьего хода камней не осталось. (или, аналогично, проигрывает тот, кто не может сделать хода).

0. "Ним с восстановлением ходов"
Предположим, что текущая позиция в стандартном ниме выигрышная. Требуется найти тот ход (т.е. первый из всех), который приведёт к нашей победе (конечно, не обязательно к победе за один этот ход).

1. "Ним по степеням двойки"
Почти стандартный ним, но за один ход можно брать только 2^K камней (K - целое, >=0). Сказать, кто выиграет.

2. "Ним по половинам"
Почти стандартный ним, но за один ход из кучки можно брать не более половины камней, содержащихся в ней.

3. "Ромашка"
Есть ромашка с N<=1000 лепестками. За один ход можно вырвать либо 1, либо 2 соседних лепестка (при определении "соседности" надо не обращать внимания на образующиеся пустоты). Сказать, кто выиграет.

4. "Шахматы из пешек"
Есть поле 3xN, в 1-й строке которого все клетки заняты белыми пешками, а в 3-ей - чёрными, 2-я строка пустая. За один ход игрок может либо пойти пешкой вперёд, либо, если есть возможность бить, то игрок обязан бить. Как обычно, проигрывает тот, кто не может сделать ход. N<=1000.

5. "Крестики-нолики на полоске"
Есть полоса длиной N<=1000 клеток. Два игрока по очереди ставят крестики в пустые клетки. Выигрывает тот, после чьего хода появится 3 и более крестиков подряд.

6. "Фишки в графе"
Дан ациклический ориентированный граф. В некоторых вершинах графа уже стоят фишки. За один ход игрок может подвинуть любую фишку вдоль какого-либо ребра. Проигрывает тот, кто не может сделать ход. Ограничения - вроде 1000 вершин.

7. "Фишки в графе с аннигиляциями"
Почти предыдущая задача, но отличие в том, что если две фишки встречаются в одной вершине, то он взаимно уничтожаются.

8. "Фишки в полоске"
Есть поле 1xN (вроде N<=1000), в некоторых его клетках уже стоят фишки. За один ход можно подвинуть любую фишку влево на любое количество позиций, но так, чтобы никакие две фишки не совпали, а также запрещено перепрыгивать другие фишки. Как обычно, проигрывает тот, кто не может сделать ход.

Решения этих задач могу опубликовать, но наверно это стоит сделать попозже.

7

Люди, большое спасибо, задачи прикольные  :cool: .


Вы здесь » ACM - Псков » Алгоритмы » Nim