fbpx

Problema #597 – Poza – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa