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