Cod sursa(job #2799517)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 13 noiembrie 2021 12:07:47
Problema BMatrix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bmatrix.in");
ofstream fout("bmatrix.out");
char c,a[205][205];
int v[205],n,m,i,j,x,y,sol,k,st[205],dr[205],sus[205],jos[205];
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)fin>>a[i][j];
    for(i=1;i<=n;i++)
    {
        for(j=1; j<=m; j++)
        {
            if(a[i][j]=='0')v[j]++;
            else v[j]=0;
            x=10005;
            y=0;
            for(k=j; k>=1; k--)
            {
                x=min(x,v[k]);
                y=max(y,x*(j-k+1));
            }
            st[j]=max(st[j],max(st[j-1],y));
            sus[i]=max(sus[i],max(sus[i-1],y));
        }
    }
    memset(v,0,sizeof(v));
    for (i=n; i>=1; i--)
        for (j=m; j>=1; j--)
        {
            if (a[i][j]=='0') v[j]++;
            else v[j]=0;
            x=10005;
            y=0;
            for (k=j; k<=m; k++)
            {
                x=min(x,v[k]);
                y=max(y,x*(k-j+1));
            }
            dr[j]=max(dr[j],max(dr[j+1],y));
            jos[i]=max(jos[i],max(jos[i+1],y));
        }
    for(i=1; i<n; i++)sol=max(sol,sus[i]+jos[i+1]);
    for(j=1; j<m; j++)sol=max(sol,st[j]+dr[j+1]);
    fout<<sol;
    return 0;
}