Cod sursa(job #638313)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 20 noiembrie 2011 20:13:17
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.79 kb

#include <cstdio>
#include <fstream>
#include <algorithm>

using namespace std;

#define N 1001

int a[N][N],pal[N][N],n,m,sol;

void read ()
{
	ifstream in ("dreptpal.in");
	in>>n>>m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			in>>a[i][j];
			for(int k=j-2;k>0;--k)
				if(a[i][k]==a[i][j]&&pal[i][(k+j)>>1]==j-k-2)
					pal[i][(k+j)>>1]+=2;
		}
}

void solve ()
{
	sol=n;
	for(int i=1;i<=m;++i)
		a[1][i]=1;
	for(int i=1;i<n;++i)
		for(int j=1;j<=m;++j)
		{
			int s;
			if(pal[i][j]<=pal[i+1][j]||pal[i][j]>pal[i+1][j])
			{
				a[i+1][j]=a[i][j]+1;
				s=a[i+1][j]*(min(pal[i][j],pal[i+1][j])+1);
			}
			else
				a[i+1][j]=1;
			if(s>sol)
			sol=s;
		}
}

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

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