Pagini recente » Cod sursa (job #97257) | Cod sursa (job #715381) | Cod sursa (job #1280738) | Cod sursa (job #660465) | Cod sursa (job #2453029)
#include <cstdio>
using namespace std;
const int NMAX = 151;
int N, M, L, C;
long long A[2 * NMAX][2 * NMAX];
long long ansa, ansb;
static inline long long Sum (int x1, int y1, int x2, int y2)
{
return A[x2][y2] - A[x2][y1 - 1] - (A[x1 - 1][y2] - A[x1 - 1][y1 - 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", &A[i][j]);
for(int i = 1; i < N; ++i)
for(int j = 1; j < M; ++j)
A[i][j + M] = A[i + N][j] = A[i + N][j + M] = A[i][j];
for(int i = 1; i < 2 * N; ++i)
for(int j = 1; j < 2 * M; ++j)
A[i][j] += A[i - 1][j] + A[i][j - 1] - A[i - 1][j - 1];
for(int l = L; l <= N; ++l)
for(int c = C; c <= M; ++c)
for(int l1 = 1, l2 = l; l1 <= N; ++l1, ++l2)
for(int c1 = 1, c2 = c; c1 <= M; ++c1, ++c2)
{
long long Numa = Sum(l1, c1, l2, c2);
long long Numb = l * c;
if(!ansa && !ansb)
{
ansa = Numa;
ansb = Numb;
continue;
}
if(1LL * Numa * ansb > 1LL * Numb * ansa)
{
ansa = Numa;
ansb = Numb;
}
}
long double ans = 1.0 * ansa / ansb;
long long Ans = (ans * 1000.0);
printf("%lld.%lld\n", Ans / 1000, Ans % 1000);
return 0;
}