Într-un tablou bidimensional de dimensiuni date (numărul de linii) şi (numărul de coloane) există în fiecare celulă o valoare sau . Un turn este format numai din valori vecine, de pe aceeaşi coloană, numărul acestor valori egale cu reprezentând înălţimea turnului. Se consideră că pe o coloană nu există alte valori egale cu 1 în afara celor care intră în componenţa unui turn.
Fiecare coloană poate conţine câte un singur turn. Dacă o coloană are numai valori , se consideră totuşi că acea coloană conţine un turn de înălţime . Dacă o coloană are una sau mai multe valori , atunci una dintre ele este obligatoriu plasată pe ultima linie.
Luând pe rând toate perechile formate din câte turnuri aflate pe coloane vecine, este posibilă următoarea operaţie de reconfigurare: din turnuri de înălţime nenulă, de pe coloane vecine se poate forma un nou turn cu înălţimea egală cu suma celor două. Dorim astfel să obţinem în final numărul maxim de turnuri de înălţime maximă. Există însă două condiţii care trebuie respectate:
- înălţimea noului turn format nu poate depăşi valoarea (numărul de linii ale tabloului);
- orice turn care a contribuit la formarea unui turn de înălţime maximă nu mai poate contribui şi la formarea unui alt turn de înălţime maximă.
Operaţia de reconfigurare se efectuează o singură dată.
Cerință
Dându-se tabloul bidimensional cu linii şi coloane cu valori şi , se cere:
- Să se afişeze înălţimile turnurilor din configuraţia iniţială, precizându-se şi turnurile cu înălţime , începând cu cel mai din stânga turn
- Să se afişeze înălţimea maximă a turnurilor rezultate după operaţia de reconfigurare
- Să se afişeze numărul maxim de turnuri de înălţime maximă, rezultate după operaţia de reconfigurare
Date de intrare
Fişierul de intrare turnuri.in
va conţine:
- pe prima linie din fişier se află numărul natural care reprezintă numărul de linii şi numărul natural care reprezintă numărul de coloane, valori separate între ele printr-un spaţiu
- pe următoarele linii câte n valori sau , separate două câte două printr-un spaţiu
Date de ieșire
Fişierul de ieşire turnuri.out
va conţine trei linii:
- pe prima linie se află înălţimile iniţiale ale turnurilor, valori separate două câte două printr-un spaţiu
- pe a doua linie se află înălţimea maximă a turnurilor rezultate după operaţia de reconfigurare
- pe a treia linie se află numărul maxim de turnuri de înălţime maximă, rezultate după operaţia de reconfigurare
Restricții și precizări
- ;
- Testele si restricțiile au fost refăcute pentru standardele anului
- Se acordă punctaje parţiale: cerinţa a) % din punctaj, cerinţa b) % din punctaj, cerinţa c) %.
- Toate turnurile incep de pe ultima linie a matricii.
Exemplul 1
turnuri.in
6 6
0 0 0 0 0 0
1 0 0 0 0 0
1 0 1 0 0 0
1 0 1 1 0 1
1 0 1 1 1 1
1 0 1 1 1 1
turnuri.out
5 0 4 3 2 3
5
2
Explicație
Avem turnuri: primul, cel mai din stânga, are înălţimea , următorul , următorul , următorul , următorul şi ultimul .
Înălţimea maximă este şi se obţine din valoarea iniţială a turnului , precum şi din combinarea ultimului turn cu penultimul sau a penultimului turn cu antepenultimul.
Observaţie: turnul de pe coloana (penultimul) contribuie la formarea unui singur turn de înălţime maximă, fie cu turnul din coloana (antepenultimul), fie cu cel din coloana (ultimul), dar nu cu amândouă simultan. Astfel numărul de turnuri de înălţime maximă este (unul iniţial şi unul format din ultimele două turnuri (sau din penultimul şi antepenultimul)). De asemenea, dacă s-ar combina al treilea turn cu al patrulea ar rezulta un turn cu înălţimea , valoare mai mare decât numărul de linii din tablou (), ceea ce înseamnă operaţie nepermisă
Exemplul 2
turnuri.in
4 4
0 0 0 0
0 0 0 0
1 0 1 0
1 1 1 1
turnuri.out
2 1 2 1
3
2
Explicație
Avem turnuri cu înălţimile iniţiale: .
Înălţimea maximă este şi se obţine din combinarea turnurilor şi , respectiv cu .