Cod sursa(job #331428)

Utilizator CezarMocanCezar Mocan CezarMocan Data 13 iulie 2009 22:17:51
Problema Balans Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#define maxn 301

using namespace std;

int n, m, i, j, r, c;
int l1, l2, c1, c2;
double mx;
int v[maxn][maxn], s[maxn][maxn], col[maxn][maxn];

inline void better(int l1, int c1, int l2, int c2) {
	int sum, nr;
	sum = s[l2][c2] - s[l1 - 1][c2] - s[l2][c1 - 1] + s[l1 - 1][c1 - 1];
	nr = (l2 - l1 + 1) * (c2 - c1 + 1);
	if (1.0 * sum / (1.0 * nr) > mx) {
		mx = (1.0 * sum / (1.0 * nr));
	}
}

int main() {
	freopen("balans.in", "r", stdin);
	freopen("balans.out", "w", stdout);
	
	scanf("%d%d%d%d", &n, &m, &r, &c);
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++) {
			scanf("%d", &v[i][j]);
			v[i + n][j] = v[i][j + m] = v[i + n][j + m] = v[i][j];
		}
		
    for (i = 1; i <= 2 * n; i++)
        for (j = 1; j <= 2 * m; j++) 
            col[i][j] = col[i - 1][j] + v[i][j];
		
	for (i = 1; i <= 2 * n; i++)
		for (j = 1; j <= 2 * m; j++) 
			s[i][j] = s[i][j - 1] + col[i][j];
		
	
	for (l1 = 1; l1 <= n; l1++)
		for (l2 = l1 + r - 1; l2 <= l1 + n; l2++) 
			for (c1 = 1; c1 <= m; c1++)
				for (c2 = c1 + c - 1; c2 <= c1 + m; c2++)
					better(l1, c1, l2, c2);
						
	printf("%.3f\n", mx);
	
	return 0;
}