După ce ți-ai dat seama că nu poți învinge nici unul dintre monștrii (din problema SAO), ai decis să te retragi și să devii un fermier. Din banii pentru cumpărarea echipamentului ai cumpărat o parcelă codificată sub forma unei matrice de n
linii și m
coloane, pentru fiecare zonă cunoscându-se fertilitatea ei. Cum nu ai bani ca să cultivi pământul, dorești să selectezi o parcelă în care toate zonele să aibă aceeași fertilitate, iar fertilitatea totală să fie maximă. Fertilitatea totală a unei parcele este egală cu suma fertilităților zonelor care compun acea parcelă.
Cerința
Dându-se matricea codificărilor zonelor din teren, să se determine fertilitatea totală maximă a unei parcele în care toate zonele au aceeași fertilitate.
Date de intrare
Fișierul de intrare sao1.in
conține pe prima linie numerele n
şi m
, iar pe următoarele n
linii câte m
numere naturale, separate prin spaţii, reprezentând elementele matricei.
Date de ieșire
Fișierul de ieșire sao1.out
va conține numărul P
, reprezentând fertilitatea totală maximă a unei parcele, în condițiile date.
Restricții și precizări
1 ≤ n,m ≤ 500
- fertilitatea totală se va încadra pe tipul de date
long long
. - nu există sol infertil (a cărui fertilitate să fie mai mică sau egală cu
0
). - acesta este “bad ending”-ul problemei SAO
Exemplu 1:
sao1.in
4 4 1 1 1 3 1 1 1 3 1 1 1 3 3 3 3 3
sao1.out
21
Explicație
Cele 7
valori de 3
formează zona cu profit maxim.
Exemplu 2:
sao1.in
4 4 3 5 1 3 1 5 5 3 5 5 5 3 3 3 3 3
sao1.out
30
Explicație
Cele 6
valori de 5
formează zona cu profit maxim.
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 SAO1:
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sao1.in");
ofstream fout("sao1.out");
long long a[502][502],n,m,s,smax;
void refill(int x,int y,long long v){
a[x][y]=0;
s+=v;
if(a[x+1][y]==v){
refill(x+1,y,v);
}
if(a[x-1][y]==v){
refill(x-1,y,v);
}
if(a[x][y+1]==v){
refill(x,y+1,v);
}
if(a[x][y-1]==v){
refill(x,y-1,v);
}
}
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]){
s=0;
refill(i,j,a[i][j]);
smax=max(smax,s);
}
}
}
fout<<smax;
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 #2741 SAO1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2741 SAO1 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!