标签:manacher its har str == int min turn hdu
#include<bits/stdc++.h> const int maxn=1e6+10; using namespace std; int p[maxn*2+10]; string manacher(string ss) { string tt="$#"; for(int i=0;i<ss.size();i++){tt+=ss[i]; tt+="#";} int mx=0; int id=0; int mid=0; int ls=0; for(int i=1;i<tt.size();i++) { if(mx>i) p[i]=min(p[2*id-i],mx-i); else p[i]=1; while(tt[i+p[i]]==tt[i-p[i]]) p[i]++; if(i+p[i]>mx) { mx=i+p[i]; id=i; } if(ls<p[i]) { ls=p[i]; mid=i; } } for(int i=1;i<tt.size();i++) p[i]=0; return ss.substr((mid - ls) / 2, ls - 1); } char a[maxn]; int main() { while(scanf("%s",&a)!=EOF) { string ss=""; int l=strlen(a); for(int i=0;i<l;i++) ss+=a[i]; ss=manacher(ss); cout<<ss.size()<<endl; } }
标签:manacher its har str == int min turn hdu
原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/10290506.html