1

Тема: Игра

Объясните, пожалуйста, как решить эту задачу, ибо с теорией игр еще не работал.

Поле игры состоит из N расположенных вряд одна за другой ячеек. В начале игры в первой и N-той ячейке находятся две фишки. Каждый из двух игроков может перемещать свою фишку на не более K позиций вправо или влево. Запрещается оставаться на месте и перескакивать фишку соперника. Проигрывает тот, кто не может сделать ход. Напишите программу, которая сообщит кто выиграет, если каждый из игроков будет пытаться использовать выигрышную стратегию.

входные данные

В единственной строке записано N (1 <N ≤ 500) и K (0 <K ≤ 50), которые разделены пробелом.

исходные данные

Выведите "1", если победит первый игрок и "2" в противном случае.

пример ввода

5 2

пример вывода

2

2

Re: Игра

Воспользуемся методом динамического программирование с запоминанием: пусть d[А][В] - выиграет ли игрок, если он ходит фишкой в позиции A, а у второго игрока фишка в позиции B. Перебираем следующий ход и смотрим - если был хоть один ход в проигрышное состояние, то наше состояние выигрышное, иначе проигрышное.
Код тут: http://ideone.com/IvaJy
O(N * N * 2K)

3

Re: Игра

climbit
Эм, вообще-то у вас получилась циклическая динамика: из состояния можно прийти в себя же. Поэтому метод динамического программирования здесь не работает.

BVI94
Для решения избавимся от цикличности в игре. Переформулируя условие, за один ход каждый игрок может либо уменьшить расстояние между фишками (не более чем на K), либо увеличить его (не более чем на K, и не выходя при этом за пределы поля). Таким образом, мы получили игру, похожую на ним с увеличениями. Применяя аналогичные рассуждения, мы получаем, что делать ходы, увеличивающие расстояние между фишками, невыгодно, поэтому их можно не рассматривать.

Таким образом, мы получаем такую игру: есть кучка из N-2 камней (именно таково расстояние между клетками 1 и N), за один ход игрок может взять от 1 до K камней, и кто не может сделать ход - проигрывает. Такая игра решается простой динамикой за O (N * K), однако её решение можно получить и сразу, заметив, что эта игра - фактически k-ним, и ответ определяется просто остатком от деления на K+1.

4

Re: Игра

Спасибо, теперь буду знать!

5

Re: Игра

Еще один вопрос. Есть n кучек по ai камней.
- За один ход разрешается брать камни только с одной кучки.
- Можно брать количество камней, которая является точным квадратом целого числа.
- За один ход нужно взять как минимум один камень

Что делать с этим "квадратом целого числа", какое будет решение?

6

Re: Игра

Надо рассмотреть игру с одной кучкой: здесь применима обычная теория Шпрага-Гранди, поэтому можно запрограммировать (или посчитать на бумажке) значения функции Гранди для, скажем, первых 100 размеров. Уверен, в них найдётся какая-нибудь закономерность, что позволит получить решение за O(n).

7

Re: Игра

Прикольная игра.

8

Re: Игра

это не игра, а задачка)))