Cod sursa(job #635558)

Utilizator cosminx2003Cosmin Clapon cosminx2003 Data 19 noiembrie 2011 13:12:21
Problema PalM Scor 20
Compilator cpp Status done
Runda .com 2011 Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <string.h>
#define N 500
#define min(a,b) ((a>b)?b:a)
using namespace std;
ifstream f("palm.in");
ofstream g("palm.out");

int main() {
	char s[N];
	int o[N]={0},r[N]={0},n,i,temp,j,max=0,len,p,m;
	
	f>>s;
	
	n=strlen(s)-1;
	o[0]=1,r[n]=1;
	for(i=1;i<=n;i++) {
		temp=s[i]-s[i-1];
		if(0 == temp || 1 == temp) {
			o[i]+=o[i-1]+1;
		} else {
			o[i]=1;
		}
		temp=s[n-i]-s[n-i+1];
		if(0 == temp || 1 == temp) {
			r[n-i]+=r[n-i+1]+1;
		}  else {
			r[n-i]=1;
		}
	}
	
	/*for(i=0;i<=n;i++) {
		cout<<o[i]<<" ";
	}
	cout<<endl;
	for(i=0;i<=n;i++) {
		cout<<r[i]<<" ";
	}*/
	for(i=1;i<=n;i++) {
		//if(o[i-1] == r[i+1]) {
			m=min(r[i+1],o[i-1]);
			len=2*m+1;
			p=1;
			if(max < len) {
				for(j=1;j<=m;j++) {
					if(s[i+j]!=s[i-j]) {
						p=0;
						break;
					}
					if(p) {
						max=len;
					}
				}

			}
		//}
	}
	//cout<<endl;
	g<<max;
	
	f.close();
	g.close();
	return 0;
}