Ana si Barbu
au cules N mere, le-au asezat
pe masa si trebuie sa le pregateasca pentru compot. Cum taiatul merelor este
de obicei o treaba plicticoasa, au inventat urmatorul joc. In jocul lor ei muta
alternativ, incepand cu Ana. Jucatorul aflat la mutare trebuie sa execute una
dintre urmatoarele 3 operatii:
1. Taie un mar intreg in
trei parti egale.
2. Taie
un mar intreg in doua parti egale.
3. Taie
o jumatate de mar in doua parti egale.
Cel care
nu mai poate executa nici o mutare pierde.
Cerinta
Scrieti un program care sa determine daca Ana are strategie sigura de castig (indiferent cum ar juca Barbu, ea poate castiga jocul). In caz afirmativ, sa se programeze mutarile Anei, mutarile lui Barbu fiind citite de la tastatura.
Date de intrare
Programul nu citeste date din nici un fisier.
Date de iesire
Programul nu va scrie date in nici un fisier.
Interactiune
Programul vostru va interactiona
cu un program al comisiei care ruleaza în paralel. În cadrul unui
set de test (test-case), programul vostru va trebui sa dea raspunsul corect
pentru mai multe teste. Pentru fiecare test din set, interactiunea are urmatorul
format:
1. Programul vostru citeste o linie de la intrarea standard, care contine numarul
N; daca se citeste zero, testele
din setul de date s-au terminat si programul trebuie sa se încheie.
2. Daca N este diferit de zero,
programul vostru va determina daca Ana are sau nu strategie sigura de castig.
Daca da, programul vostru va efectua un numar de runde. O runda consta din scrierea
unei linii la iesirea standard, care descrie operatia efectuata de Ana în
runda respectiva (linia va contine numarul operatiei efectuate 1,
2 sau 3).
Apoi, se va citi o linie de intrarea standard care descrie operatia efectuata
de Barbu (linia va contine numarul operatiei efectuate 1,
2 sau 3).
Când programul vostru a executat ultima mutare, afiseaza o linie speciala,
continand numai cuvantul DONE
3. Daca programul vostru a decis ca Ana nu are strategie sigura de castig va
afisa o linie care contine valoarea 0.
Apoi va afisa linie care contine cuvantul DONE
Punctaj
Programul vostru va primi
punctajul corespunzator setului de teste curent daca si numai daca a rezolvat
corect toate testele continute in setul respectiv.
Programul vostru primeste 0 puncte pe un anumit test in urmatoarele situatii
:
- afiseaza in cadrul unei runde numarul unei operatii ce nu poate fi executata
la momentul respectiv;
- afiseaza ca Ana are strategie sigura de castig atunci cand nu are (sau invers);
- atunci cand Ana are strategie sigura de castig, programul vostru nu castiga;
- formatul de afisare impus in problema nu este respectat.
Instructiuni de programare
Programatorii în C/C++ trebuie sa execute flush dupa ce au terminat de scris o linie completa la iesire. Acest lucru este valabil si pentru linia începând cu DONE
În cazul programelor
scrise în C++ si utilizarea iostreams, se va folosi urmatoarea secventa
pentru citirea de la intrarea standard si scrierea la iesirea standard:
cin>>x;
cout<<op<<'\n'<<flush;
În cazul programelor
în C sau C++ si utilizarea scanf
si printf, se va folosi urmatoarea
secventa pentru citirea de la intrarea standard si scrierea la iesirea standard:
scanf ("%d",
&x);
printf("%d\n",op); fflush (stdout);
În cazul programelor
în Pascal se va folosi urmatoarea secventa pentru citire de la intrarea
standard se utilizeaza readln,
iar pentru afisarea unei linii se utilizeaza writeln
:
readln(x);
writeln(op);
Restrictii
Operatie | Efect |
Citeste N (1) Ana executa operatia
2 Citeste mutarea lui Barbu (operatia 3) Ana executa operatia 3 Ana scrie o linie continand DONE Citeste N (2) Ana scrie o linie cu 0 Ana scrie o linie cu DONE Citeste N (0) |
M (un mar intreg) JJ ( doua jumatati) SSJ (o jumatate si doua sferturi) SSSS (4 sferturi) Se termina testul MM (doua mere intregi) Ana nu are strategie sigura de castig Se termina testul S-a terminat setul de teste. |
Timp maxim de executie/test: 0.2 secunde
prof. Emanuela
Cerchez
Liceul de Informatica
"Grigore Moisil" Iasi
Contact:emanuela.cerchez@gmail.com