mere

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

Exemplu de interactiune
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