Pagini recente » Pswap | Monitorul de evaluare | Monitorul de evaluare | Profil Vlad3108 | Cod sursa (job #2193670)
#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 ++)
{
i2 = i1 + r - 1;
for (int j1 = 1, j2; j1 <= m; j1 ++)
{
j2 = j1 + c - 1;
S = 1.00 * CalcSum(i1, i2, j1, j2);
if (S / (r * c) > Smax)Smax = S / (r * c);
}
}
int Rez = Smax * 1000;
fout << fixed << setprecision(3) << 1.00 * Rez / 1000;
return 0;
}