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; }