Pagini recente » Cod sursa (job #254198) | Cod sursa (job #2929208) | Cod sursa (job #245432) | Cod sursa (job #3295735) | Cod sursa (job #2939796)
#include <fstream>
using namespace std;
ifstream fin ("bmatrix.in");
ofstream fout ("bmatrix.out");
int n,m,i,j,i1,aria,i2,j1,j2,k,maxc,maxc1,st[205],dr[205],stiva[205],a[205];
bool v[205][205];
char ch;
int main()
{
fin>>n>>m;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
fin>>ch;
v[i][j]=ch-'0';
}
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (v[i][j]==0)
a[j]++;
else
a[j]=0;
}
k=0;
for (j=1; j<=m; j++)
{
while (k>0&&a[j]<=a[stiva[k]])
k--;
if (k>0)
st[j]=stiva[k]+1;
else
st[j]=1;
k++;
stiva[k]=j;
}
k=0;
for (j=m; j>0; j--)
{
while (k>0&&a[j]<=a[stiva[k]])
k--;
if (k>0)
dr[j]=stiva[k]-1;
else
dr[j]=m;
k++;
stiva[k]=j;
}
for (j=1; j<=m; j++)
{
aria=(dr[j]-st[j]+1)*a[j];
if (aria>maxc)
{
maxc=aria;
j1=st[j];
j2=dr[j];
i2=i;
i1=i2-a[j]+1;
}
}
}
for (i=i1; i<=i2; i++)
{
for (j=j1; j<=j2; j++)
v[i][j]=1;
}
for (j=1; j<=m; j++)
a[j]=0;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (v[i][j]==0)
a[j]++;
else
a[j]=0;
}
k=0;
for (j=1; j<=m; j++)
{
while (k>0&&a[j]<=a[stiva[k]])
k--;
if (k>0)
st[j]=stiva[k]+1;
else
st[j]=1;
k++;
stiva[k]=j;
}
k=0;
for (j=m; j>0; j--)
{
while (k>0&&a[j]<=a[stiva[k]])
k--;
if (k>0)
dr[j]=stiva[k]-1;
else
dr[j]=m;
k++;
stiva[k]=j;
}
for (j=1; j<=m; j++)
{
aria=(dr[j]-st[j]+1)*a[j];
if (aria>maxc1)
maxc1=aria;
}
}
fout<<maxc+maxc1;
return 0;
}