Украинские Олимпиады
Украинские Олимпиады по Информатике
по Информатике

Соревнования

Информация
Добро пожаловать
Гостевая книга
Обратная связь
О сайте

ACM-олимпиада
Новости
Правила
Задачи
Сдать задачу
Таблица результатов

IOI-олимпиада
Новости
Правила
Последние задачи
Последние результаты
Архив

"Трудно-решаемая" задача
Новости
Правила
Последняя задача
Последние результаты
Архив

Логические игры
Новости
Правила
Виды игр
Последний турнир
Архив

Викторина
Новости
Правила
Последняя викторина
Архив

 
 
Винница'1997

Ним

  

 

В игру Ним играют двое. Есть N (2<=N<=100) кучек камешков. Игроки поочередно берут камешки из кучек. Выигрывает тот, кто берет последний камешек. На каждом ходу игрок может брать камешки не больше чем из K (1<=K<=N) кучек, но должен взять хотя бы один камешек. В начале игры в каждой кучке 0 < H[i] < 1000000000 камешков.

Задача

Напишите программу, которая будет играть в Ним и, по возможности, выигрывать.

Технические условия

Во время проверки к Вашей программе будет присоединен (linked) модуль проверки, которая называется CHECK.* (PAS, C или CPP). Этот модуль содержит 3 функции: InitGame, JudgeTurn, PartTurn.

Функция InitGame используется для считывания входных данных из тестового файла. Она имеет 4 исходных параметры: N и K - количества кучек, массив H - количества камешков в кучках, First - кто первый ходит. После вызова этой функции N и K получат соответствующие значения, в первых N элементах массива H будут количества камешков в кучках, а First принимает значение 0, если первой ходит программа проверки (жюри), и 1, если первой ходит программа участника. Обратите внимание, что Ваша программа не должна самостоятельно читать входные данные, это нужно делать только с помощью функции InitGame.

Функцию JudgeTurn Ваша программа будет вызвать, если ей нужно будет получить очередной ход жюри. Единственный выходный параметр этой функции - массив T, первые N элементов которого содержат количества камешков, которые проверяющая программа берет из кучек. Соответствие хода условиям игры гарантируется.

Функцию PartTurn Ваша программа будет вызывать, чтобы сообщить проверяющей программе свой ход. Запишите свой ход в первые N элементов массива T.

Любая из этих функций возвращает 1, если все в порядке , или 0, если возникла ошибка, и Ваша программа может прекращать работу.

На полученной Вами дискете будет модуль проверки (CHECK.*) и главный модуль (NIM_KBD.*). Они предоставляются только для того, чтобы Вы могли быстро начать работу над решением, не теряя время на технические проблемы. Модуль CHECK выполняет считывание данных с клавиатуры, проверку ходов участника и последовательности вызовов функции, но очень плохо играет. Жюри при проверке будет использовать другой. Модуль NIM_KBD выполняет функции модуля CHECK в нужной последовательности, но вместо вычисления следующего хода участника читает его с клавиатуры. Ваша задача и состоит в том, чтобы функция MakeTurn вычисляла следующий ход. Жюри не настаивает на использовании упомянутых файлов, но Ваше решение должно корректно взаимодействовать с модулем CHECK.

Примечание

При проверке среди тестов будут такие частичные случаи:

1) N = 2, K = 1; 2) N = 3, K = 1; 3) N > 3, K = 1.

Файлы на дискетах C            C++          Pascal
Главный модуль    NIM_KBD.C  NIM_KBD.CPP   NIM_KBD.PAS
Модуль проверки   CHECK.C,   CHECK.CPP,    CHECK.PAS
                  CHECK.H    CHECK.H   
Файл проекта      NIM.PRJ    NIM.PRJ       нет
Программа-решение - NIM.PAS, NIM.CPP или NIM.C.
Пример
N = 4, K = 2, First = 1, H = (3,4,5,6).
Участник: (1,1,0,0), осталось (2,3,5,6)
Жюри: (0,0,1,1), осталось (2,3,4,5)
Участник: (0,0,1,1), осталось (2,3,3,4)
Жюри: (1,1,0,0), осталось (1,2,3,4)
Участник: (0,0,0,4), осталось (1,2,3,0)
Жюри: (0,0,1,0), осталось (1,2,2,0)
Участник: (1,2,0,0), осталось (0,0,2,0)
Жюри: (0,0,2,0), осталось (0,0,0,0)
Выиграло жюри (но участник имел шанс !!!)

  

 

Сборник

Олимпиады
Международные
Всесоюзные
Всеукраинские (IV этап)
Разные...

Всеукраинские олимпиады
1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002

Отборочные сборы
1992 1993 1994 1996 1997 1998 1999 2000 2001 2002

Международные олимпиады
1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002

Всесоюзные олимпиады
1989 1990 1991 1992

Информация
Список ссылок
Литература
Статьи
Рассылки
Интервью

© Разработано рабочей группой UOI 1998-2002 гг.