| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
manacher----CSPorz#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define maxn 2100000
using namespace std;
char s[maxn]; int n,maxright,pos,rl[maxn];
int ans; int st=0;
int main(){
while(cin>>s){
int ans=0; pos=0; maxright=0; memset(rl,0,sizeof(rl));
if(s[0]=='E'&&s[1]=='N'&&s[2]=='D')return 0; st++;
n=strlen(s);
for(int i=n*2;i>=0;i--){
if(i%2)s[i]=s[(i-1)/2];
else s[i]='#';
}
n*=2;
for(int i=0;i<=n;i++){
if(i<maxright)rl[i]=min(rl[2*pos-i],maxright-i);
else rl[i]=1;
while(i-rl[i]>=0&&i+rl[i]<=n&&s[i+rl[i]]==s[i-rl[i]])rl[i]++;
if(i+rl[i]-1>maxright){
maxright=i+rl[i]-1;
pos=i;
}
ans=max(ans,rl[i]);
}
printf("Case %d: %d\n",st,ans-1);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator