Pagini recente » Cod sursa (job #3191620) | Cod sursa (job #918671) | Cod sursa (job #1170989) | Cod sursa (job #2214782) | Cod sursa (job #330182)
Cod sursa(job #330182)
# include <stdio.h>
const long int MAXN=300;
long int n,m,p,q,a[MAXN+1][MAXN+1];
long int sume[MAXN+1][MAXN+1];
float sol;
void citire()
{
FILE *f=fopen("balans.in","r");
fscanf(f,"%ld%ld%ld%ld",&n,&m,&p,&q);
long int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
fscanf(f,"%ld",&a[i][j]);
a[i+n][j]=a[i][j];
a[i][j+m]=a[i][j];
a[i+m][j+m]=a[i][j];
}
fclose(f);
}
void scrie()
{
FILE *g=fopen("balans.out","w");
fprintf(g,"%ld.%ld\n",(long int)sol,((long int)(sol*1000))%1000);
fclose(g);
}
long int suma(long int i, long int j, long int p, long int q)
{
return sume[i][j]-sume[i-p][j]-sume[i][j-q]+sume[i-p][j-q];
}
void calculeaza()
{
long int i,j,pp,qq;
for (i=1;i<=2*n;i++)
for (j=1;j<=2*m;j++)
sume[i][j]=sume[i-1][j]+sume[i][j-1]-sume[i-1][j-1]+a[i][j];
//determinam suma maxima
for (pp=p;pp<=n;pp++)
for (qq=q;qq<=m;qq++)
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if ((float)suma(i+p-1,j+q-1,pp,qq)/(pp*qq)>sol) sol=(float)suma(i+p-1,j+q-1,pp,qq)/(pp*qq);
}
int main()
{
citire();
calculeaza();
scrie();
return 0;
}