Cod sursa(job #636756)

Utilizator elfusFlorin Chirica elfus Data 19 noiembrie 2011 23:18:57
Problema DreptPal Scor 40
Compilator cpp Status done
Runda .com 2011 Marime 1.04 kb
#include <stdio.h>

int N, M, x[1024][1024], D[1024][1024];

int check (int i, int j)
{
    int st = j - 1, dr = j + 1, l = 1;
    while (st > 0 && dr <= M)
    {
        if (x[i][st] != x[i][dr])
            return l;
        st --;
        dr ++;
        l += 2;
    }

    return l;
}

int main ()
{
    int i, j, max = 0, k;

    freopen ("dreptpal.in", "r", stdin);
    freopen ("dreptpal.out", "w", stdout);

    scanf ("%d%d", &N, &M);
    for (i = 1; i <= N; i ++)
        for (j = 1; j <= M; j ++)
            scanf ("%d", &x[i][j]);
    for (i = 1; i <= N; i ++)
        for (j = 1; j <= M; j ++)
            D[i][j] = check (i, j);

    for (j = 1; j <= M; j ++)
        for (i = 1; i <= N; i ++)
        {
            if (D[i][j] == D[i - 1][j])
                continue;
            for (k = i; k <= N; k ++)
                if (D[k][j] < D[i][j])
                    break;
            if ((k - i) * D[i][j] > max)
                max = (k - i) * D[i][j];
        }

    printf ("%d", max);
    return 0;
}