Rezolvare completă PbInfo #597 Poza

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

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Poza:

//problema poza
/*
 *  Determinam cel mai de sus, mai de jos, mai din stanga si mai din dreapta obiect de prim plan si
 *  afisam elementele dintre acestea
 * 
 * */

#include <iostream>
using namespace std;

int a[1001][1001], 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 = n+1, imax = 0, jmin = m + 1, jmax = 0;
    for (int i = 1 ;i <= n ; ++i)
        for(int j = 1 ; j <= m ; ++j)
            if(a[i][j] == 1)
            {
                if(i < imin) imin = i;
                if(i > imax) imax = i;
                if(j < jmin) jmin = j;
                if(j > jmax) jmax = j;
                    
            }
    cout << imax - imin + 1  << " " << jmax - jmin + 1 << endl;
    for (int i = imin ;i <= imax ; ++i){
        for(int j = jmin ; j <= jmax ; ++j)
            cout << a[i][j] << " ";
        cout << endl;
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #597 Poza

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #597 Poza de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!