Cod sursa(job #1240908)

Utilizator Athena99Anghel Anca Athena99 Data 12 octombrie 2014 12:23:48
Problema Balans Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <iomanip>

using namespace std;

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

const int out_precision= 3;
const int nmax= 150;

int s[2*nmax+5][2*nmax+5];

int main(  ) {
    int n, m, r, c;
    fin>>n>>m>>r>>c;
    for ( int i= 1; i<=n; ++i ) {
        for ( int j= 1; j<=m; ++j ) {
            fin>>s[i][j];
            s[n+i][j]= s[i][m+j]= s[n+i][m+j]= s[i][j];
        }
    }
    for ( int i= 1; i<=2*n; ++i ) {
        for ( int j= 1; j<=2*m; ++j ) {
            s[i][j]= s[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
        }
    }

    double sol= 0;
    for ( int row= max(r, 1); row<=n; ++row ) {
        for ( int col= max(c, 1); col<=m; ++col ) {
            for ( int i= n+1; i<=2*n; ++i ) {
                for ( int j= m+1; j<=2*m; ++j ) {
                    int sum= s[i][j]+s[i-row][j-col]-s[i-row][j]-s[i][j-col];
                    if ( (double)sol*row*col<(double)sum ) {
                        sol= (double)sum/(row*col);
                    }
                }
            }
        }
    }

    sol*= 1000;
    //fout<<setprecision(out_precision)<<fixed;
    fout<<(int)sol/1000<<"."<<(int)sol%1000<<"\n";

    return 0;
}