Pagini recente » Cod sursa (job #2779154) | Cod sursa (job #2964266) | Cod sursa (job #1320446) | Cod sursa (job #2766234) | Cod sursa (job #2193672)
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;
ifstream fin ("balans.in");
ofstream fout ("balans.out");
int n, m, r, c;
double Smax;
vector< vector<int> > A;
int CalcSum(int i1, int i2, int j1, int j2)
{
return A[i2][j2] - A[i1 - 1][j2] - A[i2][j1 - 1] + A[i1 - 1][j1 - 1];
}
int main()
{
fin >> n >> m >> r >> c;
A = vector< vector<int> >(2 * n + 1, vector<int>(2 * m + 1));
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
{
fin >> A[i][j];
A[i + n][j] = A[i][j + m] = 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];
double S;
for (int i1 = 1, i2; i1 <= n; i1 ++)
for(int i2 = i1 + r - 1; i2 <= i1 + n; i2 ++)
{
for (int j1 = 1; j1 <= m; j1 ++)
for (int j2 = j1 + c - 1; j2 <= j1 + m; j2 ++)
{
S = 1.00 * CalcSum(i1, i2, j1, j2);
int R = i2 - i1 + 1, C = j2 - j1 + 1;
if (S / (R * C) > Smax)Smax = S / (R * C);
}
}
int Rez = Smax * 1000;
fout << fixed << setprecision(3) << 1.00 * Rez / 1000;
return 0;
}