算法学习manacher

Posted PinkRabbit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习manacher相关的知识,希望对你有一定的参考价值。

manacher太水了。

这篇blog不能称作算法学习,因为根本没有介绍……

就贴个模板,太简单了……

 1 #include<cstdio>
 2 #include<cstring>
 3 #define MAXN 1000005
 4 char str[MAXN];
 5 int n,str2[MAXN<<1],p[MAXN<<1];
 6 int main(){
 7     scanf("%s",str+1); n=strlen(str+1);
 8     memset(str2,-1,sizeof str2);
 9     for(int i=1;i<=n;++i)
10         str2[i<<1]=str[i];
11     n=n<<1|1;
12     int mpi=2; p[1]=1; p[2]=2;
13     for(int i=3,j;i<=n;++i){
14         j=(mpi<<1)-i;
15         if(j-p[j]<=mpi-p[mpi]){
16             p[i]=mpi+p[mpi]-i;
17             while(0<i-p[i]&&i+p[i]<=n&&str2[i-p[i]]==str2[i+p[i]]) ++p[i];
18             mpi=i;
19         }
20         else p[i]=p[j];
21     }
22     for(int i=1;i<=n;++i) printf("%d ",str2[i]); puts("");
23     for(int i=1;i<=n;++i) printf("%d ",p[i]); puts("");
24     return 0;
25 }

 

以上是关于算法学习manacher的主要内容,如果未能解决你的问题,请参考以下文章

Manacher算法总结

manacher算法模板

Manacher || Luogu P3805模板manacher算法

manacher马拉车算法

manacher(马拉车)算法

Manacher 入门+模板 回文串专用算法