Входные данные: стандартный ввод Выходные данные: стандартный вывод Ограничения на память: 32 MB Время на тест: 1 секунда Тесты к задаче:Скачать
Игра с бусинками и лунками является одной из старейших форм развлечения. В этой задаче приводится вариант ioiwari подобной игры, специально разработанный для международной олимпиады по информатике.
В игру играют два игрока. Для игры используется доска с семью лунками, расположенными по кругу. Кроме того, у каждого игрока есть свой банк, изначально пустой. В начале игры 20 бусинок случайно распределяются по всем семи лункам так, что в каждую лунку помещается от 2-х до 4-х бусинок (не менее 2-х и не более 4-х). Два игрока ходят по очереди. Во время своего хода игрок выбирает любую непустую лунку, забирает из нее все бусинки в руку и выполняет ряд действий, пока в его руке остается хотя бы одна бусинка. Начиная с лунки, расположенной сразу за той, из которой он забрал бусинки в начале хода, он последовательно переходит по часовой стрелке от одной текущей лунки к другой, выполняя следующие операции:
Если в руке игрока более одной бусинки, тогда если текущая лунка уже содержит 5 бусинок, то игрок вынимает из нее одну бусинку и перемещает в свой банк; если же в текущей лунке менее пяти бусинок, то игрок помещает в нее одну бусинку из своей руки.
Если же в руке игрока ровно одна бусинка, тогда если текущая лунка содержит от одной до четырех бусинок, то все бусинки из этой лунки и единственная бусинка из руки игрока помещаются в его банк; в противном случае (то есть текущая лунка содержит 0 или 5 бусинок), бусинка из руки игрока перемещается в банк противника.
Ход считается сделанным, когда у игрока в руке не останется ни одной бусинки.
Игра закончится, когда по окончании очередного хода все лунки окажутся пустыми. Победителем считается тот из игроков, в банке которого будет больше бусинок.
Первый игрок всегда имеет выигрышную стратегию. Вы должны написать программу, которая играет в игру ioiwari за первого игрока и выигрывает. Учтите, что второй игрок будет играть оптимально, то есть при первом же неправильном ходе со стороны вашей программы она не выигрывает.
ВВОД И ВЫВОД
Ваша программа читает входные данные из стандартного потока ввода и пишет выходные данные в стандартный поток вывода. Ваша программа играет за первого игрока, а противник – за второго. В начале работы ваша программа должна считать строку из 7-ми целых чисел p1, …, p7: начальное количество бусинок в лунках с номерами 1, …, 7 соответственно (лунки пронумерованы от 1 до 7 по часовой стрелке).
После этого начинается игра. Ваша программа должна играть следующим образом:
Если ход делает ваша программа, то она должна вывести в стандартный поток вывода номер лунки, из которой забираются все бусинки в начале хода.
Если ход делает противник вашей программы, то ваша программа должна считать из стандартного потока ввода номер лунки, из которой все бусинки в начале своего хода забрал противник.
ВСПОМОГАТЕЛЬНЫЕ ПРОГРАММНЫЕ СРЕДСТВА
Вам дана программа (ioiwari2 для Linux, ioiwari2.exe для Windows), которая для одной конкретной начальной ситуации играет за второго игрока оптимальным образом. В первую строку стандартного потока вывода эта программа выводит данные, описывающие начальное распределение бусинок по лункам, которое должна считать ваша программа в начале своей работы:
4 3 2 4 2 3 2
После этого данная программа будет играть в игру, считывая ходы первого игрока из стандартного потока ввода и записывая свои ходы в стандартный поток вывода. Вы можете запустить вашу программу и программу ioiwari2 в отдельных окнах и вручную организовать игру между ними. Программа ioiwari2 записывает весь диалог в файл ioiwari.out.
УКАЗАНИЯ ПО НАПИСАНИЮ ПРОГРАММЫ
В приведенных ниже примерах переменная mymove содержит ваш ход, а переменная last ход противника.
Если программа на C++ использует iostreams, вы должны организовать ввод и вывод следующим образом:
cout<
cin>>last;
Если программа на C или C++ использует scanf и printf, вы должны организовать ввод и вывод следующим образом:
Если ваша программа на Pascal, вы должны организовать ввод и вывод следующим образом:
Writeln(mymove);
Readln(last);
ПРИМЕР
Ниже приведено корректное описание 6-ти ходов и содержимое лунок и банков игроков после каждого хода.
Содержимое лунок и банков игроков после операции
Операция/Метки лунок
1.
2.
3.
4.
5.
6.
7.
Банк1
Банк2
Начальная ситуация
4
3
2
4
2
3
2
0
0
Ход первого игрока: 2
4
0
3
5
0
3
2
3
0
Ход второго игрока: 3
4
0
0
4
1
4
0
3
4
Ход первого игрока: 5
4
0
0
4
0
0
0
8
4
Ход второго игрока: 4
0
0
0
0
1
1
1
8
9
Ход первого игрока: 5
0
0
0
0
0
0
1
10
9
Ход второго игрока: 7
0
0
0
0
0
0
0
11
9
БАЛЛЫ
Если ваша программа при тестировании выигрывает, то вы получаете 4 балла за тест, в случае ничьи вы получаете 2 балла, и 0 баллов - в случае проигрыша. клиника урологии . Ноутбуки для дома и работы - джойстик. . Icq скачать бесплатно на русском Аська.