Cod sursa(job #2031330)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 3 octombrie 2017 00:24:21
Problema BMatrix Scor 56
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;
int Largest(char A[205][205],int n,int m){
    int v[205]={0};
    int Max=-1;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j)
            if(A[i][j]=='0') ++v[j];
            else v[j]=0;
        for(int j=1;j<=m;++j){
            int Min=v[j];
            for(int k=j;k<=m;++k){
                Min=min(Min,v[k]);
                Max=max(Max,(k+1-j)*Min);
            }
        }
    }
    return Max;
}
char A[205][205],X[205][205],Y[205][205];
int main(){
    freopen("bmatrix.in","r",stdin);
    freopen("bmatrix.out","w",stdout);
    int n,m;
    scanf("%d %d\n",&n,&m);
    for(int i=1;i<=n;++i)
        fgets(A[i]+1,205,stdin);
    int Max=-1;
    /// CAZ 1 TAIETURA VERTICALA
    for(int k=0;k<=m;++k){
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                if(j<=k) X[i][j]=A[i][j];
                else Y[i][j-k]=A[i][j];
        int Sol=Largest(X,n,k)+Largest(Y,n,m-k);
        if(Sol>Max)
            Max=Sol;
    }
    /// CAZ 2 TAIETURA ORIZONTALA
    for(int k=0;k<=m;++k){
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                if(i<=k) X[i][j]=A[i][j];
                else Y[i-k][j]=A[i][j];
        int Sol=Largest(X,k,m)+Largest(Y,n-k,m);
        if(Sol>Max)
            Max=Sol;
    }
    printf("%d\n",Max);
    return 0;
}