Cod sursa(job #2643404)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 19 august 2020 18:59:21
Problema Balans Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 150;
long long a[NMAX + 5][NMAX + 5] , sp[NMAX + 5][NMAX + 5];
int n , m;
long long f(int i , int i1 , int j)
{
    if(i1 > n)
        return sp[n][j] - sp[i - 1][j] + sp[i1 - n][j];
    return sp[i1][j] - sp[i - 1][j];
}
int main()
{
    freopen("balans.in" , "r" , stdin);
    freopen("balans.out" , "w" , stdout);
    int i , j , i1 , j1 , r , c , x;
    long long s , s1;
    long double maxim , aux;
    scanf("%d%d%d%d" , &n , &m , &r , &c);
    for(i = 1 ; i <= n ; i ++)
        for(j = 0 ; j < m ; j ++)
        {
            scanf("%lld" , &a[i][j]);
            sp[i][j] = sp[i - 1][j] + a[i][j];
        }
    maxim = 0.0;
    for(i = 1 ; i <= n ; i ++)
        for(i1 = i + r - 1 ; i1 < i + n ; i1 ++)
        {
            x = i1 - i + 1;
            for(j = 0 ; j < m ; j ++)
            {
                s = 0;
                for(j1 = j ; j1 < j + c ; j1 ++)
                    s += f(i , i1 , j1 % m);
                aux = (1.0 * s) / (1.0 * x * c);
                maxim = max(maxim , aux);
                s1 = s;
                for(j1 = j + c ; j1 < j + m ; j1 ++)
                {
                    s1 += f(i , i1 , j1 % m);
                    aux = (1.0 * s1) / (1.0 * x * (j1 - j + 1));
                    maxim = max(maxim , aux);
                }
            }
        }
    printf("%.3lf\n" , maxim);
    return 0;
}