码迷,mamicode.com
首页 > 编程语言 > 详细

【算法学习】manacher

时间:2018-01-27 17:19:38      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:efi   ==   学习   eof   col   简单   style   fine   int   

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

标签:efi   ==   学习   eof   col   简单   style   fine   int   

原文地址:https://www.cnblogs.com/PinkRabbit/p/8366150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!