Cod sursa(job #850445)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 8 ianuarie 2013 15:54:02
Problema Balans Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#include<algorithm>
using namespace std ;
long a [ 307 ] [ 307 ] , r , c , n , m , sum ;
double balans ;
int main ( )
{
    freopen ( "balans.in" , "r" , stdin ) ;
    freopen ( "balans.out" , "w" , stdout ) ;
    scanf ( "%ld %ld %ld %ld" , & n , & m , & r, & c ) ;
    for ( long i = 1 ; i <= n ; ++ i )
        for ( long j = 1 ; j <= m ; ++ j )
        {
            scanf ( "%ld" , & a [ i ] [ j ] ) ;
            a [ i + n ] [ j ] = a [ i ] [ j ] ;
            a [ i ] [ j + m ] = a [ i ] [ j ] ;
            a [ i + n ] [ j + m ] = a [ i ] [ j ] ;
        }
    for ( long i = 1 ; i <= n * 2 ; ++ i )
        for ( long j = 1 ; j <= m * 2 ; ++ j )
            a [ i ] [ j ] += a [ i - 1 ] [ j ] + a [ i ] [ j - 1 ] - a [ i - 1 ] [ j - 1 ] ; //fac sume
    if ( r == 0 )
        r = 1 ;
    if ( c == 0 )
        c = 1 ;
    for ( long lin = r ; lin <= n ; ++ lin )
        for ( long col = c ; col <= m ; ++ col )
            for ( long i = n + 1 ; i <= n * 2; ++ i )
                for ( long j = m + 1 ; j <= m * 2 ; ++ j )
                {
                    sum = a [ i ] [ j ] + a [ i - lin ] [ j - col ] - a [ i - lin ] [ j ] - a [ i ] [ j - col ] ;
                    if ( sum > balans * lin * col )
                        balans = 1.0 * sum / ( lin * col ) ;
                }
    printf ( "%.3lf", ( long ) ( balans * 1000 ) /  1000.0 ) ;
}