Luogu 3805(manacher)

来源:互联网 发布:windows rt连接口 编辑:程序博客网 时间:2024/05/24 04:45

传送门

模板题。

注意: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;}