Cod sursa(job #998064)

Utilizator poptibiPop Tiberiu poptibi Data 15 septembrie 2013 17:14:13
Problema Balans Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int NMAX = 305;

int N, M, R, C, S[NMAX][NMAX], Mat[NMAX][NMAX];
double Ans;

int main()
{
    freopen("balans.in", "r", stdin);
    freopen("balans.out", "w", stdout);

    scanf("%i %i %i %i", &N, &M, &R, &C);
    for(int i = 1; i <= N; ++ i)
        for(int j = 1; j <= M; ++ j)
        {
            scanf("%i", &Mat[i][j]);
            Mat[i + N][j] = Mat[i][j + M] = Mat[i + N][j + M] = Mat[i][j];
        }

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

    for(int Lin = R; Lin <= N; ++ Lin)
        for(int Col = C; Col <= M; ++ Col)
            for(int i = N + 1; i <= 2 * N; ++ i)
                for(int j = M + 1; j <= 2 * M; ++ j)
                {
                    int CurrentSum = S[i][j] - S[i - Lin][j] - S[i][j - Col] + S[i - Lin][j - Col];
                    if(CurrentSum > Ans * Lin * Col) Ans = 1.0 * CurrentSum / (Lin * Col);
                }

    printf("%.3f",(int(Ans * 1000)) / 1000.0);

    return 0;
}