Pagini recente » Cod sursa (job #2349518) | Cod sursa (job #2685265) | Cod sursa (job #1470845) | Cod sursa (job #426698) | Cod sursa (job #422030)
Cod sursa(job #422030)
# include <stdio.h>
# include <math.h>
# define MAXN 150
unsigned 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;
long int aux;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
fscanf(f,"%ld",&aux);
a[i][j]=aux;
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",floor(sol*1000)/1000);
fclose(g);
}
float calculeaza()
{
long int i,j,k,l;
float sol = (float)sum[r][c]/(r*c),solloc,supk,supl;
//in patratul original
for (i=r;i<=n;i++)
for (j=c;j<=m;j++)
for (k=0;k<=i-r;k++)
for (l=0;l<=j-c;l++)
{
//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;
}
//in patratul de dedesubt
for (i=n+1;i<=2*n;i++)
for (j=c;j<=m;j++)
for (k=(n<i-r?n:i-r);k>=i-n;k--)
for (l=0;l<=j-c;l++)
{
//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;
}
//in patratul din dreapta
for (i=r;i<=n;i++)
for (j=m+1;j<=2*m;j++)
for (k=0;k<=i-r;k++)
for (l=(m<j-c?m:j-c);l>=j-m;l--)
{
//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;
}
//in patratul din diagonala
for (i=n+1;i<=2*n;i++)
for (j=m+1;j<=2*m;j++)
for (k=(n<i-r?n:i-r);k>=i-n;k--)
for (l=(m<j-c?m:j-c);l>=j-m;l--)
{
//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;
}