Pagini recente » Cod sursa (job #1204244) | Cod sursa (job #1475052) | Cod sursa (job #2105563) | Cod sursa (job #1221579) | Cod sursa (job #330181)
Cod sursa(job #330181)
# 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]={0};
long int 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");
float solf=(float)sol/(p*q);
fprintf(g,"%ld.%ld\n",(long int)solf,((long int)(solf*1000))%1000);
fclose(g);
}
long int suma(long int i, long int j)
{
return sume[i][j]-sume[i-p][j]-sume[i][j-q]+sume[i-p][j-q];
}
void calculeaza()
{
long int i,j;
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
sol=sume[p][q];
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (suma(i+p-1,j+q-1)>sol) sol=suma(i+p-1,j+q-1);
}
int main()
{
citire();
calculeaza();
scrie();
return 0;
}