Cod sursa(job #676819)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 9 februarie 2012 17:08:01
Problema Balans Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>

#define NMax 305

using namespace std;

int N, M, R, C, A[NMax][NMax];
double S;

void Solve ()
{
    for (int i=1; i<=N+N; ++i)
    {
        for (int j=1; j<=M+M; ++j)
        {
            A[i][j]+=(A[i-1][j]+A[i][j-1]-A[i-1][j-1]);
        }
    }
    for (int l=R; l<=N; ++l)
    {
        for (int c=C; c<=M; ++c)
        {
            for (int i=N+1; i<=N+N; ++i)
            {
                for (int j=M+1; j<=M+M; ++j)
                {
                    double Sum=A[i][j]-A[i-l][j]-A[i][j-c]+A[i-l][j-c];
                    if (Sum>S*l*c)
                    {
                        S=Sum/(l*c);
                    }
                }
            }
        }
    }
}

void Read ()
{
    freopen ("balans.in", "r", stdin);
    scanf ("%d %d %d %d", &N, &M, &R, &C);
    for (int i=1; i<=N; ++i)
    {
        for (int j=1; j<=M; ++j)
        {
            scanf ("%d", &A[i][j]);
            A[i+N][j]=A[i][j+M]=A[i+N][j+M]=A[i][j];
        }
    }
}

void Print ()
{
    freopen ("balans.out", "w", stdout);
    printf ("%.3lf\n", (S*1000)/1000.0);
}

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