Cod sursa(job #636615)

Utilizator lam99Tran Bach Lam lam99 Data 19 noiembrie 2011 21:48:50
Problema PalM Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.04 kb
#include<stdio.h>
int f[501];
char ch;
int n,x,y,i,max;
bool palindrom(int x,int y)
{
		int nr=1,i,z;
		for(i=y;i>=x;--i)
			if(f[i]!=f[i-1])
				break;
			else
				++nr; 
		z=2*y-nr-x+1;
		for(i=x;i<x+y-nr;++i)
			if(f[i]==f[z-i+x])
				continue;
			else 
				return 0;
		return 1;				
}



int maxim(int x,int y)
{
		int nr,i,z;
		for(i=y;i>=x;--i)
			if(f[i]!=f[i-1])
				break;
			else
				++nr; 
		z=(y-x+1)*2-nr;
		return z;
}
int main()
{
		freopen("palm.in","r",stdin);
		freopen("palm.out","w",stdout);
		while(scanf("%c",&ch)!=' ' || scanf("%c",&ch)!=EOF)
			{
				if(ch==' ' || ch=='\n')
					break;
				f[++n]=ch-96;
			}
		x=1;
		for(i=1;i<n;++i)
			if(f[i]<=f[i+1])
				y=i+1;
			else
				{
					if(palindrom(x,y)==1)
						if(maxim(x,y)>max)
							max=maxim(x,y);
					x=i+1;
				}
		x=1;
		for(i=2;i<=n;++i)
			if(f[i]>=f[i+1])
				y=i;
			else
				{
					x=i+1;
					if(palindrom(x,y)==1)
						if(maxim(x,y)>max)
							max=maxim(x,y);
				}
		printf("%d\n",max);	
		return 0;
}