Pagini recente » Cod sursa (job #2826003) | Cod sursa (job #584902) | Cod sursa (job #146206) | Cod sursa (job #571743) | Cod sursa (job #3184984)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bmatrix.in");
ofstream out("bmatrix.out");
const int NMAX = 201;
int a[NMAX][NMAX];
int lin_sus[NMAX], lin_jos[NMAX];
int n, m;
void debug(){
for( int l = 1; l <= n; l++ ){
for( int c = 1; c <= m; c++ )
out << a[l][c];
out << "\n";
}
out << "\n";
}
int skyline( deque <int> dq ){
int x = dq.size(), aria = 0;
for( int i = 0; i < x; i++ )
aria = max( aria, dq.front() * (x-i) ), dq.pop_front();
return aria;
}
void bmatrix( int linie_sus[NMAX], int tip ){
int up[NMAX];
for( int i = 1; i <= m; i++ )
up[i] = 0;
for( int l = 1; l <= n; l++ ){
int aria = 0;
deque <int> dq;
for( int c = 1; c <= m; c++ ){
if( !a[l][c] ){
if( tip )
up[c]++;
aria = max( aria, up[c] );
int lenght = 1;
while( dq.size() && up[c] < dq.back() ){
dq.pop_back();
lenght++;
}
aria = max( aria, lenght * up[c]);
dq.push_back(up[c]);
aria = max( aria, skyline(dq) );
if( !tip )
up[c]++;
}
else{
up[c] = 0;
dq.clear();
}
}
linie_sus[l] = aria;
}
}
int main()
{
in >> n >> m;
for( int l = 1; l <= n; l++ ){
char ch;
// in >> ch;
for( int c = 1; c <= m; c++ ){
in >> ch;
a[l][c] = ch - '0';
}
}
// debug();
bmatrix(lin_sus, 1);
for( int l = 1; l <= n/2; l++ )
for( int c = 1; c <= m; c++ ){
int aux = a[l][c];
a[l][c] = a[n-l+1][c];
a[n-l+1][c] = aux;
}
bmatrix(lin_jos, 0);
// debug();
int rez = 0;
for( int i = 1; i <= n; i++ ){
rez = max( rez, lin_sus[i] + lin_jos[n-i+1] );
// out << lin_sus[i] << " " << lin_jos[n-i+1] << "\n";
}
out << rez;
return 0;
}