Cod sursa(job #788818)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 15 septembrie 2012 22:13:07
Problema Balans Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <cstdio>
#include <iomanip>
#define NM 310

using namespace std;

int N,M,i,j,R,C,k,l;
long long A[NM][NM];
double ANS=0,CANS;

void Read ()
{
    freopen("balans.in","r",stdin);
    scanf("%d %d %d %d",&N,&M,&R,&C);
    R=max(R,1);
    C=max(C,1);
    for (i=1; i<=N; i++)
        for (j=1; j<=M; j++)
        {
            scanf("%d",&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];
        }

    for (i=1; i<=2*N; i++)
        for (j=1; j<=2*M; j++)
            A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];

}

void Solve ()
{
    for (k=R; k<=N; k++)
        for (l=C; l<=M; l++)
            for (i=N+1; i<=2*N; i++)
                for (j=M+1; j<=2*M; j++)
                {
                    CANS=(A[i][j]-A[i-k][j]-A[i][j-l]+A[i-k][j-l]);
                    if (CANS>ANS*k*l)
                        ANS=1.0*CANS/(k*l);
                }
}

void Print ()
{
    freopen("balans.out","w",stdout);
    printf("%.3lf",ANS);
}

int main ()
{
    Read();
    Solve();
    Print();
    return 0;
}