Cod sursa(job #1807010)

Utilizator tanasaradutanasaradu tanasaradu Data 15 noiembrie 2016 21:53:44
Problema Balans Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("balans.in");
ofstream fout("balans.out");
int a[301][151],n,m,R,C,n1,m1;
void Citire()
{
    int i,j;
    fin>>n>>m>>R>>C;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
          fin>>a[i][j];
}
void Formare()
{
    int i,j;
     for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            a[i+n][j]=a[i][j];
            a[i+n][j+m]=a[i][j];
            a[i][j+m]=a[i][j];
        }
    n=n*2;
    m=m*2;
}
void Sum_Partiale()
{
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
         a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
}
double Verif(int x,int y)
{
    int i,j;
    double sol=0,nr,s;
    nr=x*y;
    s=a[x][y];
    sol=max(sol,s/nr);
    for(i=x;i<=n;i++)
        for(j=y;j<=m;j++)
    {
        s=a[i][j]-a[i-x][j]-a[i][j-y]+a[i-x][j-y];
        sol=max(sol,s/nr);
    }
    return sol;
}
void Rezolvare()
{
    int i,j;
    double sol=0;
    for(i=R;i<=n1;i++)
    {
        for(j=C;j<=m1;j++)
            sol=max(sol,Verif(i,j));
    }
    fout<<fixed<<setprecision(3)<<sol<<"\n";
}
int main()
{
    Citire();
    n1=n;
    m1=m;
    Formare();
    Sum_Partiale();
    Rezolvare();
    fin.close();
    fout.close();
    return 0;
}