www.agora.ro

Runda 6

CR6P1: Galbeni

Se dau trei grămezi, fiecare conținând un număr de galbeni! La fiecare pas poate fi efectuată operația descrisă în continuare. Se aleg două dintre cele trei grămezi. Să presupunem că prima grămadă aleasă este A și ea conține x galbeni, iar a doua este B și conține y galbeni. Din grămada A se vor muta, în grămada B, y galbeni; după operație, grămada A va conține x-y galbeni, iar grămada B va conține 2y galbeni. Scrieți un program care determină, în mai puțin de 10 secunde, o secvență de operații care trebuie efectuate astfel încât să obținem două grămezi care conțin același număr de galbeni. Fiecare grămadă conține cel puțin un galben, iar numărul total al galbenilor nu poate depăși 4000000000 (patru miliarde). Datele de intrare vor fi citite din fișierul GOLD.IN care va conține trei numere separate printr-un singur spațiu, reprezentând numărul de galbeni din fiecare dintre cele trei grămezi. În fișierul de ieșire GOLD.OUT se va scrie, pe câte o linie, fiecare operație necesară pentru obținerea în final a două grămezi care conțin un număr egal de galbeni. Pentru descrierea unei operații veți folosi două numere separate printr-un spațiu. Primul număr va identifica grămada din care se vor lua galbeni, iar al doilea grămada în care se vor pune galbeni. Valorile celor două numere pot fi 1, 2 sau 3. Nu este obligatoriu ca programul să furnizeze o soluție cu număr minim de pași.

Exemplu

GOLD.IN

3703703670 1234575261 2457

GOLD.OUT

2 3

2 3

1 2

Explicație

La primul pas vom muta 2457 de galbeni din grămada 2 în grămada 3. Grămezile vor conține 3703703670, 1234572804, respectiv 4914 de galbeni. La al doilea pas vom muta 4914 galbeni din grămada 2 în grămada 3. Grămezile vor conține 3703703670, 1234567890, respectiv 9828 galbeni. La ultimul pas vom muta 1234567890 galbeni din grămada 1 în grămada 2. Grămezile vor conține 2469135780, 2469135780, respectiv 9828 de galbeni, deci primele două grămezi conțin același număr de galbeni.

CR6P2: Rubik

Se dă o grilă de dimensiuni mŽn (m linii, n coloane) care conține în fiecare celulă, un număr natural din intervalul [1,1000]. O operație constă în a aduna valoarea k (-1000 Ł k Ł 1000) la numerele conținute într-o anumită celulă și în toate celulele adiacente pe verticală sau orizontală (nu și pe diagonală). Determinați o secvență de operații care duce la obținerea aceleiași valori v în toate cele mŽn celule ale grilei. Datele de intrare sunt citite din fișierul RUBIK.IN care conține pe prima linie numerele m și n, separate printr-un singur spațiu, iar pe următoarele m linii câte n numere. Al j-lea număr de pe linia i a fișierului va corespunde numărului din a j-a celulă de pe linia i a grilei. Numerele de pe aceeași linie vor fi separate prin spații. Datele de ieșire vor fi scrise în fișierul RUBIK.OUT. Prima linie va conține valoarea v, iar a doua numărul x al operațiilor care trebuie efectuate. Următoarele x linii vor conține trei numere. Primele două vor indica linia și coloana (în această ordine) celulei alese pentru operație, iar al treilea valoarea k care va fi adunată la numărul din celulă și din celulele adiacente pe orizontală sau verticală. Programul va trebui să furnizeze, în cel mult 10 secunde, o secvență corectă de operații, nu neapărat cu număr minim de pași.

Exemplu

RUBIK.IN RUBIK.OUT

5 5 21

21 26 20 21 21 5

26 26 25 20 21 2 2 -5

22 27 21 17 21 2 3 1

10 22 17 17 17 3 2 -1

10 10 21 17 21 4 4 4

5 1 11

CR6P3: Expresie

Să se construiască o expresie aritmetică parantezată de valoare apropiată de o valoare dată. Expresia poate conține doar operanzii furnizați la intrare. Nu e neapărat nevoie să fie folosiți toți operanzii, dar fiecare poate fi folosit de mai multe ori. Se folosesc doar operatorii *, + și sunt permise și paranteze. Datele de intrare se citesc din fișierul INPUT.TXT care conține pe prima linie valoarea e (1ŁeŁ2000000000) a expresiei. Pe a doua linie se dau operanzii permiși, cel mult 10, separați prin câte un spațiu. Expresia va fi scrisă în fișierul OUTPUT.TXT și va conține maximum 100 de operatori.

Exemplu

INPUT.TXT

50

3 6 10 2

 

OUTPUT.TXT

10*(3+2)

Observație

Se acordă punctaje parțiale.

[cuprins]