Cod sursa(job #186345)

Utilizator JohnnyBravoJohnny Bravo JohnnyBravo Data 27 aprilie 2008 18:51:17
Problema Balans Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;

const int MAX_D = 151;

ifstream in("balans.in");
ofstream out("balans.out");

int M, N, R, C;
int A[MAX_D << 1][MAX_D << 1];
double balans = 0.;

void read() {
    in >> M >> N >> R >> C;
    for(int i = 1; i <= M; ++i)
        for(int j = 1; j <= N; ++j) {
            in >> A[i][j];
            A[i + M][j] = A[i][j + N] = A[i + M][j + N] = A[i][j];
        }
    for(int i = 1; i <= 2 * M; ++i)
        for(int j = 1; j <= 2 * N; ++j)
            A[i][j] += A[i - 1][j] + A[i][j - 1] - A[i - 1][j - 1];
}

void solve() {
    for(int lin = max(1, R); lin <= M; ++lin)
        for(int col = max(1, C); col <= N; ++col)
            for(int i = 1; i <= M; ++i)
                for(int j = 1; j <= N; ++j) {
                    int sum = A[i + lin - 1][j + col - 1] - A[i - 1][j + col - 1] - A[i + lin - 1][j - 1] + A[i - 1][j - 1];
                    balans = max(balans, (double)sum / (lin * col));
                }
}


int main() {
    read();
    solve();
    out << fixed << setprecision(3) << floor(balans * 1000.) / 1000. << "\n";
    return 0;
}