Cod sursa(job #1785234)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 20 octombrie 2016 23:01:45
Problema Balans Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#define MAXN 150
int sp[2*MAXN+1][2*MAXN+1];
inline int calc(int l1,int c1,int l2,int c2){
    return sp[l2][c2]-sp[l1-1][c2]-sp[l2][c1-1]+sp[l1-1][c1-1];
}
int main(){
   FILE*fi,*fout;
   int i,j,n,m,r,c,lin,col;
   double max;
   fi=fopen("balans.in" ,"r");
   fout=fopen("balans.out" ,"w");
   fscanf(fi,"%d %d %d %d " ,&n,&m,&r,&c);
   for(i=1;i<=n;i++)
     for(j=1;j<=m;j++){
       fscanf(fi,"%d " ,&sp[i][j]);
       sp[i+n][j]=sp[i][j];
       sp[i][j+m]=sp[i][j];
       sp[i+n][j+m]=sp[i][j];
     }
   for(i=1;i<=2*n;i++)
    for(j=1;j<=2*m;j++)
      sp[i][j]+=sp[i-1][j]+sp[i][j-1]-sp[i-1][j-1];
   max=0;
   for(i=r;i<=n;i++)
    for(j=c;j<=m;j++)
     for(lin=i;lin-i+1<=n;lin++)
      for(col=j;col-j+1<=m;col++)
       if(calc(lin-i+1,col-j+1,lin,col)>max*i*j)
         max=1.0*calc(lin-i+1,col-j+1,lin,col)/(i*j);
   fprintf(fout,"%.3lf" ,(int)(max*1000)/1000.0);
   fclose(fi);
   fclose(fout);
   return 0;
}