Cod sursa(job #37855)

Utilizator gigi_becaliGigi Becali gigi_becali Data 25 martie 2007 12:52:38
Problema Elimin 2 Scor 20
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 10-a Marime 0.94 kb
#include <cstdio>
#include <string>
#include <cstdlib>
#include <algorithm>
#define maxn 2005
using namespace std;
short a[maxn][maxn];
char x[maxn], y[maxn];
int n;
void afis(int i, int j)
{

	if(i==0 || j==0) return;
	if(x[i]==y[j]) afis(i-1, j-1);
	else
	{
		if(a[i-1][j]>a[i][j-1]) afis(i-1, j);
			else afis(i, j-1);
	}
	if(x[i]==y[j]) printf("%c", x[i]);
}


int main()
{
	char ax[maxn];
	int i, j;
	freopen("elimin2.in", "r", stdin);
	gets(ax);
	//puts(ax);
	
	n=strlen(ax);
	for(i=0;i<n;i++) x[i+1]=ax[i], y[i+1]=ax[i];
	reverse(y+1, y+n+1);
	
	//for(i=1;i<=n;i++)printf("%c", x[i]);
		//printf("\n");
//	for(i=1;i<=n;i++) printf("%c", y[i]);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(x[i]==y[j]) a[i][j]=a[i-1][j-1]+1;
				else a[i][j]=max(a[i-1][j], a[i][j-1]);
			
	
	//printf("\n");
			freopen("elimin2.out", "w", stdout);
	afis(n, n);
	
	printf("\n");
			//printf("%d\n", a[n][n]);
	return 0;
}