Pagini recente » Cod sursa (job #2528785) | Cod sursa (job #2470787) | Cod sursa (job #2399208) | Cod sursa (job #1642050) | Cod sursa (job #593767)
Cod sursa(job #593767)
# include <cstdio>
# include <cmath>
const char *FIN = "balans.in", *FOU = "balans.out" ;
const int MAX = 315 ;
int A[MAX][MAX], sp[MAX][MAX] ;
int N, M, R, C ;
double sol ;
inline int max (int A, int B) {
return (A > B ? A : B) ;
}
inline double max (double A, double B) {
return (A > B ? A : B) ;
}
int main (void) {
freopen (FIN, "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] ;
}
}
for (int i = R; i <= N << 1; ++i) {
for (int j = C; j <= M << 1; ++j) {
sp[i][j] = A[i][j] + sp[i - 1][j] + sp[i][j - 1] - sp[i - 1][j - 1] ;
}
}
for (int r = R; r <= N; ++r) {
for (int c = C; c <= M; ++c) {
int maxim = 0;
for (int i = N + 1; i <= N << 1; ++i) {
for (int j = M + 1; j <= M << 1; ++j) {
maxim = max (maxim, sp[i][j] + sp[i - r][j - c] - sp[i - r][j] - sp[i][j - c]) ;
}
}
sol = max (sol, maxim / (1.0 * r * c)) ;
}
}
fprintf (fopen (FOU, "w"), "%.3lf\n", floor (sol * 1000) / 1000.0) ;
}