模板题。
注意:id要初始化为0,否则本地都会RE(局部变量的初值不会自动为0)。
P.S.本文可能是本菜鸡AFO之前最后一篇(或者几篇)博文。7月底开始写博客时第二篇便是manacher,现在以此收尾,不得不感叹时间飞逝~~最后几天好好努力吧!
#include<cstdio>
#include<cstring>
#include<iostream>
#include<ostream>
#include<fstream>
#include<algorithm>
using namespace std;
const int N=11000000+4;
char a[N],b[N<<1];
int n,p[N<<1],ans=0;
inline void manacher() {
b[0]='$';
for (register int i=0;i<n;++i)
b[i<<1|1]='#',b[(i<<1)+2]=a[i];
int nn=n<<1|1,mx=0,id=0;
b[nn]='#';
for (register int i=1;i<=nn;++i) {
p[i]=mx>i?min(p[(id<<1)-i],mx-i):1;
while (b[i+p[i]]==b[i-p[i]]) ++p[i];
if (mx<i+p[i]) id=i,mx=i+p[i];
ans=max(ans,p[i]-1);
}
}
int main() {
fread(a,1,11000000,stdin);
n=strlen(a);
manacher();
cout<<ans<<endl;
return 0;
}