Cod sursa(job #636408)

Utilizator Catah15Catalin Haidau Catah15 Data 19 noiembrie 2011 19:45:17
Problema DreptPal Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 0.98 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 = 2; j < M; ++ j)
			{
				int l = L[i][j];
				
				if (l == 1) continue;
				int S = l;
				
				for (int t = i + 1; t <= N && L[t][j] >= l; ++ t) S += l;
				for (int t = i - 1; t >= 1 && L[t][j] >= l; -- t) S += l;
				
				sol = max (sol, S);
			}

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