Cod sursa(job #1496617)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 5 octombrie 2015 11:49:42
Problema Balans Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <algorithm>

#define DIM 156
using namespace std;

int D[DIM*2][DIM*2], N, M, L, C, X;

int sum(int is, int js, int ij, int jj){
    return D[ij][jj] - D[is-1][jj] - D[ij][js-1] + D[is-1][js-1];
}

int main(){

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

    scanf("%d %d %d %d", &N, &M, &L, &C);
    for(int i = 1; i <= N; i ++)
        for(int j = 1; j <= M; j ++){
            scanf("%d", &X);

            D[i][j] = X;
            D[i+N][j] = X;
            D[i][j+M] = X;
            D[i+N][j+M] = X;
        }

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

    double maxim = 0;
    for(int l = L; l <= N; l ++)
        for(int c = C; c <= M; c ++)
            for(int is = 1, ij = is + l - 1; is <= N; is ++, ij ++)
                for(int js = 1, jj = js + c - 1; js <= M; js ++, jj ++)
                    if(maxim * l * c < sum(is, js, ij, jj))
                        maxim = 1.0 * sum(is, js, ij, jj) / (l * c);

    printf("%.3f\n", (int)(maxim * 1000) / 1000.0);


    fclose(stdin );
    fclose(stdout);

    return 0;
}