Pagini recente » Cod sursa (job #2030832) | Cod sursa (job #95525) | Cod sursa (job #2331916) | Cod sursa (job #931276) | Cod sursa (job #788755)
Cod sursa(job #788755)
#include <fstream>
#include <cstdio>
#include <iomanip>
#define NM 310
using namespace std;
FILE* fin=fopen("balans.in","r");
FILE* fout=fopen("balans.out","w");
const int maxb=8192;
char buf[maxb];
int ptr=0;
inline int GetInt()
{
int nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
while ('0'<=buf[ptr]&&buf[ptr]<='9')
{
nr=nr*10+buf[ptr]-'0';
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
}
return nr;
}
int N,M,i,j,R,C,k,l;
int A[NM][NM];
double ANS=0,CANS;
void Read ()
{
N=GetInt();
M=GetInt();
R=GetInt();
C=GetInt();
for (i=1; i<=N; i++)
for (j=1; j<=M; j++)
{
A[i][j]=GetInt();
A[i+N][j]=A[i][j];
A[i][j+M]=A[i][j];
A[i+N][j+M]=A[i][j];
}
for (i=1; i<=N<<1; i++)
for (j=1; j<=M<<1; j++)
A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];
fclose(fin);
}
void Solve ()
{
for (k=R; k<=N; k++)
for (l=C; l<=M; l++)
for (i=N+1; i<=N<<1; i++)
for (j=M+1; j<=M<<1; j++)
{
CANS=(A[i][j]-A[i-k][j]-A[i][j-l]+A[i-k][j-l])/(1.0*k*l);
ANS=max(ANS,CANS);
}
}
void Print ()
{
fprintf(fout,"%.3lf",ANS);
fclose(fout);
}
int main ()
{
Read();
Solve();
Print();
return 0;
}