Cod sursa(job #1232041)

Utilizator tudorv96Tudor Varan tudorv96 Data 21 septembrie 2014 22:13:59
Problema Balans Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
using namespace std;

const int N = 305;

int m, n, a[N][N], sp[N][N], p, q, i, j, r, b;
double sol;

#define max(x,y) ((x)>(y)?(x):(y))

int main() {
    freopen ("balans.in", "r", stdin);
    freopen ("balans.out", "w", stdout);
    scanf ("%d %d %d %d", &m, &n, &p, &q);
    for (i = 1; i <= m; ++i)
        for (j = 1; j <= n; ++j) {
            scanf ("%d", &a[i][j]);
            a[m + i][j] = a[i][j + n] = a[i + m][j + n] = a[i][j];
        }
    for (i = 1; i <= m * 2; ++i)
        for (j = 1; j <= n * 2; ++j)
            sp[i][j] = sp[i][j-1] + sp[i-1][j] - sp[i-1][j-1] + a[i][j];
    for (i = m; i <= m * 2; ++i)
        for (j = n; j <= n * 2; ++j)
            for (r = p; r <= m; ++r)
                for (b = q; b <= n; ++b)
                        sol = max(sol, 1.0 * (sp[i][j] + sp[i-r][j-b] - sp[i][j-b] - sp[i-r][j]) / (r * b));
   printf ("%.3f", sol);
}