9> Colegiul Național “Frații Buzești”
Centrul de Pregătire pentru Performanță în Informatică
InfoCNFB - Ediția a II-a, Juniori
9 decembrie 2023
Cerință
Jocul nostru de tetris se desfășoară pe o tablă dreptunghiulară în care piesele “cad” de la linia . La un moment dat unele celule ale tablei sunt ocupate, altele sunt libere, și urmează să “cadă” o nouă piesă.
Din păcate tastele s-au blocat și jucătorul nu mai poate muta piesa sau să o “întoarcă”. Efectiv aceasta cade până atinge partea de jos a tablei sau o parte a sa ajunge imediat deasupra unei celule ocupate. Dacă atunci când piesa se oprește se întâmplă ca una sau mai multe linii să ajungă complet din celule ocupate, aceste linii dispar iar celulele de deasupra acestor linii se translatează în jos pe aceeași coloană, fiecare celulă translatându-se cu numărul de linii cât reprezintă valoarea celor dispărute de sub ea.
Dată fiind configurația tablei și piesa care “cade” să se determine modul în care arată tabla după căderea piesei.
Se garantează că la configurația dată a tablei (înainte de căderea piesei) nu sunt linii cu toate celulele ocupate.
Sunt două tipuri de piese, ambele formate din celule ocupate:
- Tipul ( celule ocupate aflate una sub alta):
- Tipul ( celule ocupate aflate una sub alta, iar imediat în dreapta celulei de sus mai este încă o ceulă ocupată):
Piesele cad exact pe mijlocul tablei. Dacă lățimea tablei () este impară “cade” o piesă de tipul , iar dacă lățimea este pară “cade” o piesă de tipul .
Date de intrare
Pe prima linie a fișierului tetris.in
se află trei numere , și , separate prin spațiu, reprezentând respectiv: numărul de linii, numărul de coloane ale tablei dreptunghiulare, precum și numărul de celule pe care le ocupă o piesă, așa cum este descris mai sus.
Pe fiecare din următoarele linii se află câte valori ce pot fi sau ( înseamnă celulă ocupată). Aceste valori sunt separate prin câte un spațiu. Considerăm că deasupra acestor linii mai sunt încă linii fără nicio poziție ocupată.
Date de ieșire
Fișierul tetris.out
va conține configurația tablei de joc fără liniile complet goale de deasupra (fiecare linie afișată va avea câte elemente sau , separate prin câte un spațiu).
Restricții și precizări
- ;
- ;
- ;
- Pentru de puncte avem par;
- Se garantează că pe tablă rămâne la final cel puțin o celulă ocupată.
Exemplu
tetris.in
9 4 5
1 0 0 0
1 0 1 1
1 0 1 1
1 1 0 1
tetris.out
0 1 1 0
1 1 0 0
1 1 0 1
Explicație
Suntem pe cazul cu par, piesa este de tipul și cade pe coloanele din mijloc, și .
Ne imaginăm tabla de joc astfel ( linii libere sus):
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
1 0 1 1
1 0 1 1
1 1 0 1
Căzând, piesa se oprește astfel:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 1 0
1 1 0 0
1 1 1 1
1 1 1 1
1 1 0 1
Penultimele două linii devin pline cu și dispar.
Cele linii rămase pline cu deasupra nu se mai tipăresc.
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 1 0
1 1 0 0
1 1 0 1