标签:
Time Limit: 15000MS | Memory Limit: 65536K | |
Total Submissions: 6183 | Accepted: 2270 |
Description
Input
Output
Sample Input
abcbabcbabcba abacacbaaaab END
Sample Output
Case 1: 13 Case 2: 6
manacher;
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<vector> 7 #define mem(x,y) memset(x,y,sizeof(x)) 8 using namespace std; 9 typedef long long LL; 10 const int INF=0x3f3f3f3f; 11 const int MAXN=1000010; 12 char str[MAXN],s[MAXN<<1]; 13 int p[MAXN<<1]; 14 int Manacher(char *s,int len){ 15 p[0]=p[1]=1; 16 int ans=0,id=1,mx=1; 17 for(int i=2;i<len;i++){ 18 if(mx>i)p[i]=min(p[2*id-i],mx-i); 19 else p[i]=1; 20 while(s[i-p[i]]==s[i+p[i]])p[i]++; 21 if(p[i]+i>mx)mx=p[i]+i,id=i; 22 ans=max(ans,p[i]-1); 23 } 24 return ans; 25 } 26 int main(){ 27 int flot=0; 28 while(~scanf("%s",str),strcmp(str,"END")){ 29 int len=strlen(str); 30 s[0]=‘@‘; 31 for(int i=0;i<len;i++){ 32 s[2*i+1]=‘#‘; 33 s[2*i+2]=str[i]; 34 } 35 s[2*len+1]=‘#‘; 36 printf("Case %d: %d\n",++flot,Manacher(s,2*len+2)); 37 } 38 return 0; 39 }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4909103.html