2607 - Pentagon
În urma bombardamentelor din 11 septembrie 2001, clădirea Pentagonului a suferit daune la unul din pereții clădirii. Imaginea codificată a peretelui avariat se reprezintă sub forma unei matrice cu m
linii și n
coloane, ca în figura de mai jos:
1110000111
1100001111
1000000011
1111101111
1110000111
unde 1
reprezintă zid intact, iar 0
zid avariat. Sumele alocate pentru refacerea Pentagonului vor fi donate celor care vor ajuta americanii să refacă această clădire prin plasarea, pe verticală, a unor blocuri de înălțimi k
, k=1
, …, m
, și lățime 1
, în locurile avariate.
Cerința[edit | edit source]
Pentru o structură dată a unui perete din clădirea Pentagonului, determinaţi numărul minim al blocurilor, de înălţimi k=1
, k=2
, …, k=m
, necesare refacerii clădirii.
Date de intrare[edit | edit source]
Fișierul de intrare pentagon.in
conține pe prima linie dimensiunile m
şi n
ale peretelui clădirii, iar pe următoarele m
linii câte o secvență de caractere 1
sau 0
de lungime n
.
Date de ieșire[edit | edit source]
Fișierul de ieșire pentagon.out
va conține pe câte o linie, ordonate crescător după k
, perechi de forma k nr
, unde k
este înălțimea blocului, iar nr
este numărul de blocuri de înălțime k
, separate prin câte un spaţiu.
Restricții și precizări[edit | edit source]
1 ≤ m, n ≤ 200
- nu se vor afișa blocurile de înălțime
k
, a căror număr este zero (0
).
Exemplu:[edit | edit source]
pentagon.in
5 10 1110000111 1100001111 1000000011 1111101111 1110000111
pentagon.out
1 7 2 1 3 2 5 1
<syntaxhighlight lang="python" line="1"> def min_blocks_to_repair(matrix):
m = len(matrix) n = len(matrix[0]) min_blocks = 0 for col in range(n): row = 0 while row < m: if matrix[row][col] == 0: height = 1 while row + height < m and matrix[row + height][col] == 0: height += 1 min_blocks += 1 row += height else: row += 1 return min_blocks
- Testare
matrix = [
[1, 1, 1, 0, 0, 0, 1, 1, 1], [1, 1, 0, 0, 0, 0, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 1, 1], [1, 1, 1, 1, 1, 0, 1, 1, 1], [1, 1, 1, 0, 0, 0, 1, 1, 1]
]
print(min_blocks_to_repair(matrix)) # Output: 8 </syntaxhighlight>