Cod sursa(job #1310429)

Utilizator AndyCatrunaCatruna Andy AndyCatruna Data 6 ianuarie 2015 20:40:06
Problema BMatrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
using namespace std;
ifstream fin("bmatrix.in");
ofstream fout("bmatrix.out");
int n,m,s[205][205],sus[205],jos[205],i,j,sol,k;
char a[205][205],b[205][205];
void calcul(){
    int i,j,x,A;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(a[i][j]=='0'){
                s[i][j]=s[i-1][j]+1;
            }
            else{
                s[i][j]=0;
            }
        }
        sus[i]=0;jos[i]=0;
    }
    for(i=1;i<=n;i++){
        for(j=i;j<=n;j++){
            k=0;
            for(x=1;x<=m;x++){
                if(s[j][x]>=j-i+1){
                    k++;
                }
                else{
                    k=0;
                }
                A=k*(j-i+1);
                sus[j]=max(sus[j],A);
                jos[i]=max(jos[i],A);
            }
        }
    }
    for(i=1;i<=n;i++){
        sus[i]=max(sus[i],sus[i-1]);
    }
     for(i=n;i>=1;i--){
        jos[i]=max(jos[i],jos[i+1]);
    }
}
int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>a[i]+1;
    }
    calcul();
    for(i=1;i<=n;i++){
        sol=max(sol,jos[i]+sus[i-1]);
    }
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            b[m-j+1][i] = a[i][j];
        }
    }

    swap(n, m);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            a[i][j]=b[i][j];
        }
    }
    calcul();
    for(i=1;i<=n;i++){
        sol=max(sol,jos[i]+sus[i-1]);
    }
    fout<<sol<<"\n";


    return 0;
}