Pagini recente » Cod sursa (job #2044683) | Cod sursa (job #355754) | Cod sursa (job #2404530) | Cod sursa (job #782583) | Cod sursa (job #1747185)
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 305;
int M[maxn][maxn];
long long sp[maxn][maxn];
int n, m;
void calc()
{
for(int i = 1; i <= n * 2; i++)
for(int j = 1; j <= m * 2; j++)
sp[i][j] = sp[i - 1][j] + sp[i][j - 1] - sp[i - 1][j - 1] + M[i][j];
}
inline long long get_sum(int x1, int y1, int x2, int y2)
{
return sp[x2][y2] - sp[x1 - 1][y2] - sp[x2][y1 - 1] + sp[x1 - 1][y1 - 1];
}
inline int get_dim(int x1, int y1, int x2, int y2)
{
return (x2 - x1 + 1) * (y2 - y1 + 1);
}
int main()
{
freopen("balans.in", "r", stdin);
freopen("balans.out", "w", stdout);
int r, c;
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", &M[i][j]);
M[i][j + m] = M[i][j];
M[i + n][j] = M[i][j];
M[i + n][j + m] = M[i][j];
}
}
calc();
long long mx = 0;
int l = 0;
int col = 0;
long long x = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
for(int p = i + r - 1; p <= i + n - 1; p++)
{
for(int q = j + c - 1; q <= j + m - 1; q++)
{
x = get_sum(i, j, p, q) * 1000;
l = (p - i + 1);
col = (q - j + 1);
if(mx * l * col < x)
mx = x / (l * col);
}
}
}
}
printf("%lld.", mx / 1000);
int p = mx % 1000;
if(p < 10)
printf("0");
if(p < 100)
printf("0");
printf("%d\n", p);
return 0;
}