Cod sursa(job #2187369)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 26 martie 2018 14:21:03
Problema BMatrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <climits>
#include <cstring>
using namespace std;
ifstream f("bmatrix.in");
ofstream g("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()
{
    f>>n>>m;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            f>>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=INT_MAX;
            y=0;
            for(k=j; k>=1; k--)
            {
                x=min(x,v[k]);
                y=max(y,x*(j-k+1));
            }
            st[i]=max(st[i],max(st[i-1],y));
            sus[j]=max(sus[j],max(sus[j-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=INT_MAX;
            y=0;
            for (k=j; k<=m; k++)
            {
                x=min(x,v[k]);
                y=max(y,x*(k-j+1));
            }
            dr[i]=max(dr[i],max(dr[i+1],y));
            jos[j]=max(jos[j],max(jos[j+1],y));
        }
    sol=0;
    for(i=1; i<n; i++)
        sol=max(sol,st[i]+dr[i+1]);
    for(j=1; j<m; j++)
        sol=max(sol,sus[j]+jos[j+1]);
    g<<sol<<" ";
    return 0;
}