Pagini recente » Cod sursa (job #1357397) | Cod sursa (job #1273839) | Cod sursa (job #2254954) | Cod sursa (job #218760) | Cod sursa (job #422013)
Cod sursa(job #422013)
# include <stdio.h>
# define MAXN 150
long int a[2*MAXN+1][2*MAXN+1],sum[2*MAXN+1][2*MAXN+1];
long int n,m,r,c;
void citire()
{
FILE *f=fopen("balans.in","r");
fscanf(f,"%ld%ld%ld%ld",&n,&m,&r,&c);
long int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
fscanf(f,"%ld",&a[i][j]);
a[i+n][j]=a[i][j];
a[i][j+m]=a[i][j];
a[i+n][j+m]=a[i][j];
}
fclose(f);
for (i=1;i<=2*n;i++)
for (j=1;j<=2*m;j++)
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
void scrie(float sol)
{
FILE *g=fopen("balans.out","w");
fprintf(g,"%.3f\n",sol);
fclose(g);
}
float calculeaza()
{
long int i,j,k,l;
float sol = sum[r][c]/(r*c),solloc;
for (i=1;i<=2*n;i++)
for (j=1;j<=2*m;j++)
for (k = (i-n > 0) ? i-n : 0 ; k <= i-r; k++) //nu tre' sa vina mai sus de i-r linii orice ar fi
for (l = (j-m > 0) ? j-m : 0; l <= j-c; l++) // nu tre' sa vina mai la dreapta de j-c coloane orice ar fi
{
//printf("(%ld %ld) -> (%ld %ld)\n",k,l,i,j);
solloc = ((float)(sum[i][j]-sum[k][j]-sum[i][l]+sum[k][l]))/((i-k)*(j-l));
if (solloc > sol)
sol = solloc;
}
return sol;
}
int main()
{
citire();
float sol = calculeaza();
scrie(sol);
return 0;
}