397
Cerința
Fie o poză dată sub forma unei matrice cu n linii și m coloane, în care elementele sunt 0 sau 1: un element 0 reprezintă fundalul imaginii, iar un element 1 reprezintă obiect din prim plan. Este necesară tăierea unei bucăți din imagine astfel încât:
- laturile bucății tăiate sunt paralele cu laturile pozei inițiale și cât mai mici;
- toate obiectele din prim-plan în poza inițială apar în poza tăiată;
Determinați dimensiunile pozei tăiate, precum și conținutul ei.
Date de intrare
Programul citește de la tastatură numerele n m, iar apoi n șiruri cu câte m valori 0 sau 1, reprezentând poza inițială.
Date de ieșire
Programul va afișa pe ecran numerele p q, separate printr-un spațiu, reprezentând dimensiunile pozei tăiate, apoi p linii cu câte q valori separate prin exact un spațiu, reprezentând poza tăiată.
Restricții și precizări
1 ≤ n,m ≤ 100- în poză va exista cel puțin un element de prim-plan
Exemplu
Intrare
5 6 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0
Ieșire
3 5 0 1 0 1 0 1 1 1 1 1 0 0 0 1 0
#include <bits/stdc++.h>
using namespace std;
int a[101][101], n, m;
int main(){
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
int imin = 101, imax = 0, jmin = 101, jmax = 0;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
if(a[i][j] == 1){
if(i > imax)
imax = i;
if(i < imin)
imin = i;
if(j > jmax)
jmax = j;
if(j < jmin)
jmin = j;
}
cout << imax - imin + 1 << ' ' << jmax - jmin + 1 << endl;
for(int i = imin; i <= imax; ++i, cout << endl)
for(int j = jmin; j <= jmax; ++j)
cout << a[i][j] << ' ';
return 0;
}
Comentarii