Pagini recente » Cod sursa (job #2350661) | Cod sursa (job #856537) | Cod sursa (job #206367) | Cod sursa (job #1122416) | Cod sursa (job #1822986)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("bmatrix.in");
ofstream out ("bmatrix.out");
int const NMAX = 201;
int n , m;
char matrix[NMAX][NMAX];
int cangoup[NMAX];
void avansarecangoup(int line){
for(int i = 0 ;i < m ;i++){
if(matrix[line][i] == 0)
cangoup[i]++;
else
cangoup[i] = 0;
}
}
int height[NMAX],start[NMAX];
int areamax1 = 0, areamax2 = 0 , p = 0 , y = 0 ,x = 0 , length1 = 0 , length2 = 0;
void rezolvskyline(int line ){
int pointer = 1;
height[0] = cangoup[0];
start[0] = 0;
for(int i = 1 ; i <= n ;i++){
if(height[i - 1] <= cangoup[i]){
height[pointer] = cangoup[i];
start[pointer] = i;
pointer++;
}
else{
while(cangoup[i] < height[pointer - 1] && pointer > 0){
p = height[pointer - 1] * (i - start[pointer - 1 ]);
if(areamax1 < p){
areamax1 = p;
y = i - 1;
length1 = i - start[pointer - 1 ];
length2 = height[pointer - 1];
x = line;
}
pointer--;
}
height[pointer] = cangoup[i];
pointer++;
}
}
}
int main()
{
int i ,j;
bool ok = 0;
in>>n>>m;
for(i = 0 ; i < n ;i++){
for(j = 0 ; j < m ;j++){
in>>matrix[i][j];
matrix[i][j]-='0';
if(matrix[i][j] == 1)
ok = 1;
}
}
if(ok == 0){
out<<n*m;
return 0;
}
for(i = 0 ; i < n ;i++){
avansarecangoup(i);
rezolvskyline(i);
}
for(i = x - length2 + 1; i <= x ;i++){
for(j = y - length1 + 1; j <= y ;j++){
matrix[i][j] = 1;
}
}
for(i = 0 ; i < n ;i++){
for(j = 0 ; j < m ;j++){
cout<<(int)matrix[i][j];
}
cout<<'\n';
}
areamax2 = areamax1;
areamax1 = 0;
for(i = 0 ; i < n ;i++){
avansarecangoup(i);
rezolvskyline(i);
}
out<<areamax1 + areamax2;
return 0;
}