Alina este pasionată de fotografiile alb-negru. Ea ales o imagine pe care a codificat-o binar într-o matrice de dimensiune n x m
cu valori 0
corespunzătoare pentru alb (pe care le-a numit puncte luminoase) și cu valori 1
corespunzătoare pentru negru (pe care le-a numit puncte întunecate). Astfel, ea identifică în imaginea codificată zone luminoase și zone întunecate, o zonă fiind o porțiune a matricei care conține elemente cu aceeași valoare, trecerea de la un element la altul al zonei făcându-se doar prin deplasări pe orizontală sau pe verticală.
Cerința
Ajutați-o pe Alina să găsească cea mai luminoasă zonă și determinați numărul de puncte luminoase ale acesteia.
Date de intrare
Pe prima linie a fișierului text foto.in
se găsesc două numere naturale n
și m
care reprezintă numărul liniilor, respectiv numărul coloanelor matricei. Pe următoarele n
linii se găsesc câte m
valori binare, separate prin câte un spațiu, reprezentând elementele matricei care codifică imaginea.
Date de ieșire
Fișierul de ieșire foto.out
trebuie să conțină o singură linie pe care se va afla numărul punctelor din cea mai luminoasă zonă a imaginii.
Restricții și precizări
1 ≤ n ≤ 100
,1 ≤ m ≤ 100
, numere naturale- dacă nu există nicio zonă luminoasă, se va considera că cea mai luminoasă zonă are
0
elemente
Exemplu
foto.in
6 6 1 0 0 1 1 1 1 1 0 1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0 0 1 1 1
foto.out
5
Explicație
Zona cea mai luminoasă este formată din elementele: (1,2)
, (1,3)
, (2,3)
, (3,2)
, (3,3)
.
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 foto:
#include <fstream>
using namespace std;
ifstream fin("foto.in");
ofstream fout("foto.out");
const int dx[]={0,-1,0,1,0};
const int dy[]={0,0,1,0,-1};
short a[101][101],n,m;
int mx,nr;
int interior(int x, int y);
void umple(int x, int y, int& mark);
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==0)
{
nr=0;
umple(i,j,nr);
if(nr>mx)mx=nr;
}
fout<<mx<<'\n';
return 0;
}
void umple(int x, int y, int &mark)
{
int l,c,k;
mark++;
a[x][y]=-1*mark;
for(k=1;k<=4;k++)
{
l=x+dx[k];
c=y+dy[k];
if(interior(l,c) && (a[l][c]==0))
umple(l,c,mark);
}
}
int interior(int x, int y)
{
return x>0 && x<=n && y>0 && y<=m;
}
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 #3220 foto
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3220 foto 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!