Fişierul intrare/ieşire:senila.in, senila.outSursăCerc informatică Vianu
AutorCristian FrancuAdăugată defrancuCristian Francu francu
Timp execuţie pe test0.1 secLimită de memorie1024 kbytes
Scorul tăuN/ADificultatenormalnormalnormalnormalnormal

Vezi solutiile trimise

Șenila (clasa a 6-a)

Avem o şenilă formată din S segmente. Ea stă cu un singur segment pe pămînt şi se poate rostogoli. Fiecare segment este codificat cu un număr binar între 00 şi 11 (patru valori posibile). Toată şenila se codifică cu un număr binar B format prin alipirea tuturor numerelor binare de pe segmentele şenilei, astfel:

  • Ultimele două cifre ale numărului B sînt cifrele scrise pe segmentul care stă pe pămînt.
  • Penultimele două cifre ale numărului B sînt cifrele scrise pe segmentul ce urmează să calce cînd şenila se rostogoleşte.
  • Antepenultimele două cifre ale numărului B sînt cifrele scrise pe segmentul ce urmează să calce cînd şenila se rostogoleşte de două ori.
    ...
  • Primele două cifre ale numărului B sînt cifrele scrise pe segmentul imediat următor segmentului de pe pămînt, ultimul care ar atinge pămîntul cînd şenila se rostogoleşte, înainte de o rotaţie completă.

Remarcaţi că prin rostogolire şenila îşi va schimba codificarea.

Şenila se plimbă pe o tablă formată din celule pătrate, astfel: la fiecare pas ea se rostogoleşte în direcţia pe care o codează segmentul care e pe pămînt. Direcţia se calculează astfel:

cod segmentdirecţie
00
dreapta
01
jos
10
stînga
11
sus

Iniţial tabla conţine numărul zero în toate celulele. În celula din care pleacă şenila ea suprascrie codificarea sa, însă nu în binar ci în zecimal. Apoi ea avansează conform instrucţiunilor şi, de fiecare dată, îşi scrie noua codificare în celula în care ajunge, ca număr zecimal.

Cerinţe

Se dau numărul de segmente S al şenilei, precum şi un număr zecimal Z a cărui reprezentare binară codifică şenila în poziţia iniţială.

a) Dat numărul K să se spună noua codificare a şenilei după ce şenila s-a rostogolit de K ori. Numărul va fi afişat în zecimal.

b) Dat numărul A şi considerînd că şenila pleacă de la linia 1 şi coloana 1 a tablei şi avansează conform mişcării descrise, să se spună noile ei coordonate după ce ea avansează de A ori.

c) Considerînd că tabla are M linii şi N coloane, M şi N date şi ştiind că şenila porneşte de la linia L şi coloana C (prima linie şi prima coloană se numerotează cu unu) şi mai ştiind că şenila se rostogoleşte de maxim R ori, R citit, sau pînă ce aceasta se rostogoleşte în afara tablei să se afişeze matricea finală atunci cînd şenila se opreşte. Toate numerele din matrice vor fi afişate în zecimal.

Date de intrare

Fişierul de intrare senila.in conţine două linii. Pe prima linie se află numerele S Z K şi A despărţite prin spaţii, cu semnificaţia de mai sus. Pe a doua linie se află numerele M N L C şi R cu semnificaţia de mai sus.

Date de ieşire

În fişierul de ieşire senila.out veţi afişa pe prima linie un singur număr, codificarea şenilei după K rostogoliri, afişată în zecimal. Pe a doua linie veţi afişa două numere separate de un spaţiu şi anume linia şi coloana la care ajunge şenila după A rostogoliri. Pe următoarele M linii veţi afişa cîte N numere pe linie, reprezentînd valorile înscrise în matrice la oprirea şenilei, afişate şi ele în zecimal.

Restricţii

  • 1 ≤ S ≤ 31
  • 0 ≤ K ≤ 100 000 000
  • 0 ≤ A ≤ 1 000 000 000
  • 1 ≤ M, N ≤ 200
  • 1 ≤ L ≤ M
  • 1 ≤ C ≤ N
  • 0 ≤ R ≤ 1 000 000
  • La punctul b) linia şi coloana finală nu vor scădea sub zero.
  • Se acordă punctaje parţiale astfel: punctul a) 20%, punctul b) 40%, punctul c) 40%

Exemplu

senila.insenila.outExplicaţii
4 228 66 70
2 2 1 1 2
78
2 2
228 57
0 78
Şenila are iniţial codul zecimal 228, adică codul binar 11100100.
a) După ce rostogolim şenila de 66 de ori ea va avea codul 01001110 în binar, adică 78 zecimal.
b) Şenila porneşte de la linia 1 şi coloana 1.
După ce rostogolim şenila pe tablă de 70 de ori ea va ajunge la linia 2, coloana 2.
c) Şenila se va rostogoli pe o tablă de 2×2, pornind de la linia 1, coloana 1.
Ea se va rostogoli de două ori, trecînd prin codurile 11100100, 00111001 şi 01001110.
Aceste coduri sînt, în zecimal, 228, 57 şi 78. Conform segmentului de pe pămînt
şenila va merge întîi la dreapta, apoi în jos şi apoi la stînga, rezultînd tabla
afişată.
6 468 3 10
6 6 1 1 568957
1287
4 4
468 117 0 0 0 0
0 3393 0 0 0 0
0 1872 468 117 0 0
0 0 0 3393 0 0
0 0 0 1872 468 117
0 0 0 0 0 1053
 
Trebuie sa te autentifici pentru a trimite solutii. Click aici