Cod sursa(job #638093)

Utilizator irene_mFMI Irina Iancu irene_m Data 20 noiembrie 2011 18:50:41
Problema DreptPal Scor 50
Compilator cpp Status done
Runda .com 2011 Marime 1.36 kb
#include <cstdio>

const int MAX_N = 1005;
int a[ MAX_N ][ MAX_N ], d[ MAX_N ][ MAX_N ], c[ MAX_N ][ MAX_N ], N, M, sol;

void read(){
    int i, j;

    freopen( "dreptpal.in", "r", stdin );
    scanf( "%d %d", &N, &M );
    for( i = 1; i <= N; ++i )
        for( j = 1; j <= M; ++j )
            scanf( "%d", &a[ i ][ j ]);

    fclose(stdin);
}

void solve(){
    int i, j, l, min;

    sol = N;

    for( i = 1; i <= N; ++i )
        for( j = 1; j <= M; ++j ){
            l = 1;
            while( j - l >= 1 && j + l <= M && a[ i ][ j - l ] == a[ i ][ j + l ] )
                l ++;
            d[ i ][ j ] = 2 * ( l - 1 ) + 1;
        }

    for( i = 1; i <= N; ++i )
        for( j = 1; j <= M; ++j )
            if( d[ i ][ j ] > 1 ){
                min = d[ i ][ j ];
                l = 1;
                if( d[ i ][ j ] > sol )
                    sol = d[ i ][ j ];
                while( d[ i + l ][ j ] > 1 && i + l <= N ){
                    if( d[ i + l ][ j ] < min )
                        min = d[ i + l ][ j ] ;
                    l ++;
                    if( min * l > sol )
                        sol = min * l;
                }
            }
}

void write(){
    freopen( "dreptpal.out", "w", stdout );
    printf( "%d\n", sol );
}

int main(){
    read();
    solve();
    write();
    return 0;
}