标签:
Time Limit: 15000MS | Memory Limit: 65536KB | 64bit IO Format: %lld & %llu |
Description
Input
Output
Sample Input
abcbabcbabcba
abacacbaaaab
END
Sample Output
Case 1: 13
Case 2: 6
Source
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const int mxn=1000100; 9 char s[mxn],c[mxn<<1]; 10 int len; 11 int p[mxn<<1]; 12 void mana(){ 13 int id=0,mx=0; 14 int i,j; 15 for(i=1;i<len;i++){ 16 if(mx>i)p[i]=min(p[2*id-i],p[id]+id-i); 17 else p[i]=1; 18 while(c[i+p[i]]==c[i-p[i]])p[i]++; 19 if(p[i]+i>mx){ 20 mx=p[i]+i; 21 id=i; 22 } 23 } 24 return; 25 } 26 int main(){ 27 int cas=0; 28 while(scanf("%s",s)!=EOF){ 29 if(s[0]==‘E‘)break; 30 int i,j; 31 c[0]=‘$‘;c[1]=‘#‘; 32 len=strlen(s); 33 for(i=0;i<len;i++){ 34 c[i*2+2]=s[i];c[i*2+3]=‘#‘; 35 } 36 37 len=len*2+2; 38 c[len]=‘%‘; 39 mana(); 40 int ans=0; 41 for(i=0;i<len;i++)ans=max(ans,p[i]); 42 printf("Case %d: %d\n",++cas,ans-1); 43 } 44 return 0; 45 }
标签:
原文地址:http://www.cnblogs.com/SilverNebula/p/5870272.html