标签:ons ref ace oid space 回文 onclick scanf open
模板
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=3e5+5; 4 5 char s[maxn],str[maxn]; 6 int l1,l2,p[maxn],ans; 7 8 void init() 9 { 10 str[0]=‘$‘; 11 str[1]=‘#‘; 12 for(int i=0;i<l1;i++) 13 { 14 str[i*2+2]=s[i]; 15 str[i*2+3]=‘#‘; 16 } 17 l2=l1*2+2; 18 str[l2]=‘*‘; 19 } 20 int manacher() 21 { 22 int id=0,mx=0,ans=0; 23 for(int i=1;i<l2;i++) 24 { 25 if(mx>i)p[i]=min(p[2*id-i],mx-i); 26 else p[i]=1; 27 for(;str[i+p[i]]==str[i-p[i]];p[i]++); 28 if(p[i]+i>mx) 29 { 30 mx=p[i]+i; 31 id=i; 32 } 33 ans=max(ans,p[i]-1); 34 //ans+=p[i]/2; 回文串个数 35 } 36 return ans; 37 } 38 int main() 39 { 40 while(~scanf("%s",s)) 41 { 42 l1=strlen(s); 43 init(); 44 printf("%d\n",manacher()); 45 } 46 return 0; 47 }
标签:ons ref ace oid space 回文 onclick scanf open
原文地址:https://www.cnblogs.com/j666/p/11508211.html