Cod sursa(job #2643398)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 19 august 2020 18:53:50
Problema Balans Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 150;
int a[NMAX + 5][NMAX + 5] , sp[NMAX + 5][NMAX + 5] , n , m;
int 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 , s , s1 , r , c , x , xm , ym , xm1,  ym1 , sm;
    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("%d" , &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;
}