Cod sursa(job #2193670)

Utilizator ancabdBadiu Anca ancabd Data 10 aprilie 2018 21:28:51
Problema Balans Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}