Informatică, întrebare adresată de serbanodagiu, 9 ani în urmă

Gigel este patronul unui fast-food destul de cunoscut. Restaurantul are formă dreptunghiulară, și conține mai multe mese de formă de asemenea dreptunghiulară dar de dimensiuni neregulate. Gigel vă pune la dispoziție planul restaurantului, sub forma unei matrice cu n linii și m coloane, în care elementele care corespund unor spații libere sunt egale cu 0, iar elementele care fac parte din mese sunt egale cu 1. Mai precis, mesele sunt zone dreptunghiulare maximale din matrice care au toate elementele 1.

Rugămintea lui Gigel este să aflați câte mese sunt în local și care este suprafața maximă unei mese.

Răspunsuri la întrebare

Răspuns de ionutg38
4
#include <iostream>
using namespace std;

int a[255][255], 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];
//bordam matricea cu 0 - nu este necesar, deoarece folosim variabile globale, dar ca ideee ....
for(int i = 0 ; i <= n + 1 ; i ++)
a[i][0] = a[i][m + 1] = 0;
for(int j = 0 ; j <= m + 1; j ++)
a[0][j] = a[n+1][j] = 0;
int cnt = 0, smax = 0;
for(int i =1 ; i <= n ;  i ++)
for(int j = 1 ;j <= m ; ++j)
if(a[i][j] == 1)
if(a[i-1][j] == 0 && a[i][j-1] == 0)
{
cnt ++;
int ii = i, jj = j;
while(a[i][jj] == 1)
jj ++;
while(a[ii][j] == 1)
ii ++;
if( smax < (ii - i) * (jj - j) )
smax = (ii - i) * (jj - j);
}
cout << cnt << " " << smax << endl;
return 0;
}
Alte întrebări interesante