Ана и Барбу вземат N ябълки, поставят ги на масата и вече са готови да ги направят на компот. За да е по-забавно нарязването им, те измислили следната игра, в която играят с редуващи се ходове. Първа започва Ана. Играчът, който е на ход, трябва да изпълни един от следните 3 хода:
1. Да
разреже една ябълка на 3 равни части.
2. Да разреже една ябълка на 2 равни части.
3. Да разреже половин ябълка на 2 равни части.
Играта губи този, който не може да направи ход.
Задача
Напишете програма, която определя дали Ана притежава сигурна печеливша стратегия (независимо от начина на игра на Барбу, тя да спечели). Ако това в възможно, програмирайте всичките ходове на Ана, като ходовете на Барбу ги прочитате от клавиатурата.
Вход
Програмата не чете данни от файл.
Изход
Програмата не записва изходен файл.
Взаимодействие
Вашата програма трябва да взаимодейства с програма на журито (която играе за Барбу). За всеки тестов пример, взаимодействието има следния формат:
1. Вашата програма прочита
от стандартния вход броя на ябълките N. Ако
N е нула, това означава, че тестовият пример е
завършил и вашата програмата трябва да спре.
2. Ако N не е нула, вашата програма трябва да определи
дали Ана притежава или не притежава
сигурна печеливша стратегия. Ако Ана притежава
такава стратегия, вашата програма трябва да изпълни последователност
от действия. Всяко
едно действие се състои в записване на един ред на стандартния изход,
чрез което
се описва ходът в играта, направен от Ана (редът трябва да съдържа номер на
хода: 1, 2 или 3). След това, вашата програма трябва да прочете от стандартния
вход един ред, на който е записан ходът, направен от Барбу (редът ще съдържа
номер на хода: 1, 2 или 3.). Когато вашата програма изпълни последния си ход, тя
трябва да запише един ред, съдържащ думата
DONE
3. Ако вашата програма е намерила, че Ана няма сигурна печеливша
стратегия, програмата ви трябва да запише един ред, съдържащ стойността 0 и след
това още един ред, съдържащ думата
DONE
Оценяване
Вашата
програма ще получи точки за текущия тестов пример, само ако тя правилно е
извършила всичките действия за този тестов пример.
Вашата програма ще получи 0 точки за тест в случаите, когато:
- по време на едно действие, вашата програма записва номер на ход, които не би
могъл да бъде изпълнен в момента.
- вашата програма записва, че Ана има сигурна печеливша стратегия, а това не в
вярно.
- Ана има сигурна печеливша стратегия, а вашата програма не завършва играта с
победа.
- форматът на извеждане от вашата програма е неправилен.
Инструкции за програмиране
Програмиращите на C/C++ трябва да изпълнят flush след извършване на записването на всеки един ред. Същото се отнася и за реда, съдържащ DONE
За
програмите на C++, прилагащи
iostream, трябва да се използват следните инструкции за
четене от стандартия вход и за писане на стандартния изход:
cin>>x;
cout<<op<<'\n'<<flush;
За
програмите на C, използващи
scanf и printf,
трябва да се използват следните инструкции за четене от
стандартия вход и за писане на стандартния изход:
scanf ("%d", &x);
printf("%d\n",op); fflush (stdout);
При
програмите на Pascal, трябва
да се използват следните инструкции за четене от стандартия вход и за писане на
стандартния изход:
readln(x);
writeln(op);
Ограничения
Ход | Обяснение |
Прочитаме N (1) Ана
изпълнява ход номер 2 Ана изпълнява ход номер 3 Ана записва DONE Прочитаме N (2) Ана записва ред, съдържащ 0 Ана записва DONE Прочитаме N (0) |
M (цяла ябълка) JJ (две половини) SSJ (една половина и 2 четвъртинки) SSSS (4 четвъртинки) Играта е завършила MM (две цели ябълки) Ана няма сигурна печеливша стратегия Играта е завървила Тестовият пример е завършил |
Time limit: 0.2 сек/тест
prof. Emanuela Cerchez
"Grigore Moisil" Iaşi IT High School
Contact:emanuela.cerchez@gmail.com
(български превод: Емил Келеведжиев)