标签:
Description
Input
Output
Sample Input
abcbabcbabcba abacacbaaaab END
Sample Output
Case 1: 13 Case 2: 6
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int N=2000010; int n,p[N]; char s[N],str[N]; void kp() { int i; int mx=0; int id; ///for(i=n;str[i]!=0;i++) ///str[i]=0; ///没有这一句有问题,就过不了ural1297,比如数据:ababa aba; for(i=1;i<n;i++) { if(mx>i) p[i]=min(p[2*id-i],p[id]+id-i); else p[i]=1; for( ;str[i+p[i]]==str[i-p[i]];p[i]++); if(p[i]+i>mx) { mx=p[i]+i; id=i; } } } void init() { str[0]=‘$‘; str[1]=‘#‘; for(int i=0;i<n;i++) { str[i*2+2]=s[i]; str[i*2+3]=‘#‘; } n=n*2+2; s[n]=0; } int main() { int Case=1; while(scanf("%s",s)!=EOF) { if(s[0]==‘E‘&&s[1]==‘N‘&&s[2]==‘D‘) break; n=strlen(s); init(); kp(); int ans=0; for(int i=1;i<n;i++) if(p[i]>ans) ans=p[i]; printf("Case %d: %d\n",Case++,ans-1); } return 0; }
标签:
原文地址:http://www.cnblogs.com/chen9510/p/5400675.html