Cod sursa(job #872260)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 5 februarie 2013 22:04:56
Problema Teren Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
FILE *f=fopen("teren.in","r"), *g=fopen("teren.out","w");

long int n, m, x, max=0, a[305][305];

void citire(){
long int i, j;
    fscanf(f,"%ld %ld %ld\n",&n,&m,&x);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            fscanf(f,"%ld",&a[i][j]);
        }
    }
}

void recreeaza(){
long int i, j;

    for(i=2;i<=n;i++){
        a[i][1]+=a[i-1][1];
    }
    for(j=2;j<=m;j++){
        a[1][j]+=a[1][j-1];
    }

    for(i=2;i<=n;i++){
        for(j=2;j<=m;j++){
            a[i][j]=a[i][j] + a[i-1][j]+a[i][j-1]- a[i-1][j-1];
        }
    }

}

void aflare(){
long int i1, j1, i2, j2, nr1, aria;

    for(i1=1;i1<=n;i1++){

        for(j1=1;j1<=m;j1++){

          for(i2=i1;i2<=n;i2++){

            for(j2=j1;j2<=m;j2++){

                nr1= a[i2][j2] - a[i2][j1-1] - a[i1-1][j2] + a[i1-1][j1-1];

                if(nr1<=x){
                    aria= (i2-i1+1)*(j2-j1+1);
                    if(aria>max){max=aria;}
                }
                else{break;}

            }

          }

        }

    }
    fprintf(g,"%ld\n",max);

}

int main(){

    citire();
    recreeaza();
    //for(long int i=1;i<=n;i++){for(long int j=1;j<=m;j++){fprintf(g,"%ld ",a[i][j]);}fprintf(g,"\n");}
    aflare();

return 0;
}