Pagini recente » Cod sursa (job #383875) | Cod sursa (job #2047983) | Cod sursa (job #2011442) | Cod sursa (job #2384733) | Cod sursa (job #2379867)
#include<bits/stdc++.h>
using namespace std;
ifstream f("bmatrix.in");
ofstream g("bmatrix.out");
int n, m;
char a[202][202];
int sp[202][202];
int UmxL[202], DmxL[202], UmxC[202], DmxC[202];
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i)
f >> (a[i] + 1);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
sp[i][j] = sp[i-1][j] + sp[i][j-1] - sp[i-1][j-1] + (a[i][j] == '0');
for(int i = 1; i <= n; ++i)
for(int j = i; j <= n; ++j)
{
int st = 1;
for(int k = 1; k <= m; ++k)
{
if(sp[j][k] - sp[j][st - 1] - sp[i - 1][k] + sp[i - 1][st - 1] == (j - i + 1) * (k - st + 1))
UmxL[j] = max(UmxL[j], (j - i + 1) * (k - st + 1)), DmxL[i] = max(DmxL[i], (j - i + 1) * (k - st + 1));
else
st = k + 1;
}
}
for(int i = 2; i <= n; ++i)
UmxL[i] = max(UmxL[i], UmxL[i-1]);
for(int i = n - 1; i >= 1; --i)
DmxL[i] = max(DmxL[i], DmxL[i+1]);
for(int i = 1; i <= m; ++i)
for(int j = i; j <= m; ++j)
{
int st = 1;
for(int k = 1; k <= n; ++k)
{
if(sp[k][j] - sp[st - 1][j] - sp[k][i - 1] + sp[st - 1][i - 1] == (j - i + 1) * (k - st + 1))
UmxC[j] = max(UmxC[j], (j - i + 1) * (k - st + 1)), DmxC[i] = max(DmxC[i], (j - i + 1) * (k - st + 1));
else
st = k + 1;
}
}
for(int i = 2; i <= m; ++i)
UmxC[i] = max(UmxC[i], UmxC[i-1]);
for(int i = m - 1; i >= 1; --i)
DmxC[i] = max(DmxC[i], DmxC[i+1]);
int ans = 0;
for(int i = 0; i <= m; ++i)
ans = max(ans, UmxL[i] + DmxL[i+1]);
for(int i = 0; i <= n; ++i)
ans = max(ans, UmxC[i] + DmxC[i+1]);
g << ans << '\n';
return 0;
}