马拉车算法

Luogu P3805【模板】manacher 算法

复制代码
 1 // Luogu P3805 【模板】manacher 算法
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int N=3e7;
 8 char a[N],s[N];
 9 int d[N]; //回文半径函数 
10 
11 void get_d(char*s,int n){
12   d[1]=1;
13     for(int i=2,l,r=1;i<=n;i++){
14         if(i<=r)d[i]=min(d[r-i+l],r-i+1);
15         while(s[i-d[i]]==s[i+d[i]])d[i]++;
16         if(i+d[i]-1>r)l=i-d[i]+1,r=i+d[i]-1;
17         // printf("i=%d d=%d [%d %d]\n",i,d[i],l,r);
18     }  
19 }
20 int main(){
21   //改造串
22   scanf("%s",a+1);
23   int n=strlen(a+1),k=0;
24   s[0]='$',s[++k]='#';        
25   for(int i=1;i<=n;i++) 
26     s[++k]=a[i],s[++k]='#';
27   n=k;
28   
29   get_d(s,n);//计算d函数
30   int ans=0;
31   for(int i=1;i<=n;i++)
32     ans=max(ans,d[i]);
33   printf("%d\n",ans-1);
34   return 0;
35 }
复制代码

 

练习:

P3501 [POI2010] ANT-Antisymmetry - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

posted @   rw156  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示