Cod sursa(job #635683)

Utilizator cosminx2003Cosmin Clapon cosminx2003 Data 19 noiembrie 2011 14:09:32
Problema PalM Scor 20
Compilator cpp Status done
Runda .com 2011 Marime 0.96 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++) {
		if(o[i-1] < o[i] && r[i+1] < r[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;
}