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 .
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!