Cod sursa(job #1309807)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 6 ianuarie 2015 02:50:17
Problema BMatrix Scor 52
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<cstdio>
int n,m,i,j,smax,x[210][210],y[210][210],v[210];
char s[210][210],t[210][210];
FILE *f,*g;
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
void calc(){
    int i,j,k,vmax,nr;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            x[i][j]=x[i-1][j]+s[i][j]-'0';
        }
    }
    for(i=n;i>=1;i--){
        for(j=i+1;j<=n;j++){
            for(k=1;k<=m;k++){
                v[k]=x[j][k]-x[i-1][k];
            }
            vmax=0;
            nr=0;
            for(k=1;k<=m;k++){
                if(!v[k])
                    nr++;
                else{
                    vmax=maxim(vmax,nr);
                    nr=0;
                }
            }
            vmax=maxim(vmax,nr);
            y[i][j]=vmax*(j-i+1);
            if(i<j){
                y[i][j]=maxim(y[i][j],maxim(y[i+1][j],y[i][j-1]));
            }
        }
    }
}
int main(){
    f=fopen("bmatrix.in","r");
    g=fopen("bmatrix.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        fscanf(f,"%s",s[i]+1);
    }
    smax=0;
    calc();
    for(i=1;i<=n;i++){
        smax=maxim(smax,y[1][i]+y[i+1][n]);
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            t[j][m-i+1]=s[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            s[i][j]=t[i][j];
        }
    }
    int aux=n;
    n=m;
    m=aux;
    calc();
    for(i=1;i<=n;i++){
        smax=maxim(smax,y[1][i]+y[i+1][n]);
    }
    fprintf(g,"%d",smax);
    fclose(f);
    fclose(g);
    return 0;
}