coduri

Time limit: 0.05s Memory limit: 16MB Input: coduri.in Output: coduri.out

Întorcându-se de la şcoală în ziua în care a aflat cum se face înmulţirea numerelor, Gigel a auzit la televizor următoarea afirmaţie: „Pentru a face avere, nu trebuie să aduni bani în viaţă, ci trebuie să-i înmulţeşti”.

Toate acestea l-au pus pe gânduri, aşa că s-a hotărât să inventeze propriul „sistem de codificare” pentru numere reale mai mari decât 00 care să aibă următoarele proprietăţi:

  • fiecare număr va fi codificat sub forma unui şir de valori întregi (pozitive şi/ sau negative)
  • dacă un număr real xx are codul cxc_x şi un număr real yy are codul cyc_y , atunci numărul real rezultat prin înmulţirea lui xx şi yy trebuie să aibă codul obţinut prin „adunarea” codurilor cxc_x şi cyc_y
  • dacă un număr real xx se poate scrie ca produs de numere y1,y2,,yky_1, y_2, \ldots , y_k, atunci codul lui xx se obţine prin „adunarea” codurilor numerelor y1,y2,,yky_1, y_2, \ldots , y_k
  • Considerăm un cod c1c_1 format din n1n_1 valori an1a1a_{n_1} \ldots a_1 şi un cod c2c_2 format din n2n_2 valori bn2b1b_{n_2} \ldots b_1 , atunci codul c3c_3 obţinut prin „adunarea” codurilor c1c_1 şi c2c_2 va avea n3n_3 valori dn3d1d_{n_3} \ldots d_1, cu proprietăţile următoare:
    • n3n_3 este maximul dintre n1n_1 şi n2n_2
    • di={ai+bi,pentru i=1,,minim(n1,n2)ai,pentru i=minim(n1,n2)+1,n1,daca˘ minim(n1,n2)=n2bi,pentru i=minim(n1,n2)+1,n2,daca˘ minim(n1,n2)=n1d_i = \begin{cases} a_i + b_i, &\text{pentru } i = 1, \ldots, minim(n_1,n_2) \\ a_i, &\text{pentru } i = minim(n_1,n_2) + 1, \ldots n_1, &\text{dacă } minim(n_1, n_2)=n_2\\ b_i, &\text{pentru } i = minim(n_1,n_2) + 1, \ldots n_2, &\text{dacă } minim(n_1, n_2)=n_1 \end{cases}

Cerință

Dându-se NN numere reale mai mari strict decât 00, să se scrie codificarea acestora în sistemul inventat de Gigel.

Date de intrare

Fişierul de ieşire coduri.in va conţine:

  • pe prima linie din fişier se află numărul NN de numere reale
  • pe următoarele NN linii cele NN numere reale, fiecare pe câte o linie

Date de ieșire

Fişierul de ieşire coduri.out va conţine NN linii:

Pe linia ii (ii între 11 şi NN) : numărul de valori folosite pentru codificarea numărului cu indicele ii din fişierul de intrare, urmat de un spaţiu şi apoi valorile ce alcătuiesc codul numărului, separate două câte două printr-un singur spaţiu.

Restricții și precizări

  • 2N182 \leq N \leq 18
  • Separatorul între partea întreagă şi partea zecimală este virgula
  • Orice număr are după virgulă cel mult 55 cifre
  • Valorile din codurile numerelor din fişierele de test trebuie să fie cuprinse în intervalul [106,106][-10^6, 10^6]
  • Partea întreagă a fiecărui număr real este o valoare mai mică sau egală cu 20 00020 \ 000
  • Toate numerele din fişierele de test sunt strict pozitive şi distincte două câte două
  • Numărul maxim de valori utilizat pentru codificarea unui număr este 2 5002 \ 500
  • Dacă există mai multe soluţii de codificare, se va afişa una singură
  • Nu trebuie să existe două numere diferite cu aceeaşi codificare
  • 40%40\% din teste vor conţine numai numere întregi, 30%30\% din teste vor conţine numere întregi şi numere reale fără perioadă şi 30%30\% din teste vor conţine numere întregi şi numere reale cu şi fără perioadă

Exemplu

coduri.in

8
10
2
5
0,3
7
2,1
1,(7)
1,2(34)

coduri.out

2 1 1
3 -1 0 1
3 1 1 0
3 2 1 0
3 -1 2 1
3 1 3 1
2 1 11
2 1 2

Explicație

10=2510=2 \cdot 5, iar suma codurilor pentru 22 şi 55, determină codul lui 1010

2,1=70,32,1=7 \cdot 0,3, iar suma codurilor pentru 77 şi 0,30,3 determină codul lui 2,12,1

Log in or sign up to be able to send submissions!