Cod sursa(job #635669)

Utilizator cosminx2003Cosmin Clapon cosminx2003 Data 19 noiembrie 2011 14:02:26
Problema PalM Scor 20
Compilator cpp Status done
Runda .com 2011 Marime 0.9 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(temp >= 0) {
			o[i]+=o[i-1]+1;
		} else {
			o[i]=1;
		}
		temp=s[n-i]-s[n-i+1];
		if(temp >= 0) {
			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++) {
		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) {
				if(max < 2*(j-1)+1) {
					max=2*(j-1)+1;
				}
			} else {
				max=len;
			}
		}
	}
	//cout<<endl;
	g<<max;
	
	f.close();
	g.close();
	return 0;
}