Cod sursa(job #636388)

Utilizator Catah15Catalin Haidau Catah15 Data 19 noiembrie 2011 19:34:24
Problema DreptPal Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 0.99 kb
// brute O (N * M^2)

#include <iostream>
#include <cstdio>

using namespace std;

#define maxN 1005

int L[maxN][maxN], A[maxN][maxN], sol;

int main()
{
	freopen ("dreptpal.in", "r", stdin);
	freopen ("dreptpal.out", "w", stdout);
	
	int N, M;
	
	scanf ("%d %d", &N, &M);
	
	for (int i = 1; i <= N; ++ i)
	{
		for (int j = 1; j <= M; ++ j) scanf ("%d", &A[i][j]);
		L[i][1] = 1;
		L[i][M] = 1;
	}
	
	for (int i = 1; i <= N; ++ i)
		for (int j = 2; j < M; ++ j)
		{
			int l = 1;
			
			for (int t = j + 1; t <= M; ++ t)
				if (2 * j - t >= 1 && A[i][t] == A[i][2 * j - t]) l += 2;
			
			L[i][j] = l;
		}
	
	for (int i = 1; i <= N; ++ i)
		for (int j = 1; j <= M; ++ j)
		{
			int l = L[i][j];
			int k = 1;
			int minim = l;
			
			for (int t = i + 1; t <= N && L[t][j] != 1; ++ t)
			{	
				++ k;
				if (minim > L[t][j]) minim = L[t][j];
				
				int S = k * minim;
				
				sol = max (sol, S);
			}			
		}
	
	printf ("%d", sol);
	
	return 0;
}