博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P4287 [SHOI2011]双倍回文(回文自动机)
阅读量:7071 次
发布时间:2019-06-28

本文共 942 字,大约阅读时间需要 3 分钟。

 

听说有大佬用manacher$O(n)$过此题……太强啦……

说一下PAM的做法吧。(看了题解之后发现)蛮简单的

我们肯定要先建出回文自动机的

然后如果是枚举每一个节点暴跳fail指针肯定得T

那么我们对于每一个节点记录一个$trans[i]$,表示小于等于它长度一半的节点

这个可以在建自动机的时候顺便求出来,具体看代码

然后对每一个节点判断长度是否模4为0且$trans[i]$的长度是它的一半就好了

1 //minamoto 2 #include
3 #include
4 template
inline bool cmax(T&a,const T&b){
return a
len[q]) tmp=fail[tmp];27 trans[q]=ch[tmp][x];28 }29 }30 cnt[last=ch[p][x]]++;31 }32 }33 int main(){34 // freopen("testdata.in","r",stdin);35 scanf("%d",&n);36 scanf("%s",s+1);37 s[0]=-1,fail[0]=1,last=0;38 len[0]=0,len[1]=-1,tot=1;39 build();40 for(int i=tot;i>=2;--i) cnt[fail[i]]+=cnt[i];41 for(int i=2;i<=tot;++i)42 if((len[trans[i]]<<1)==len[i]&&len[i]%4==0) cmax(ans,len[i]);43 printf("%d\n",ans);44 return 0;45 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9629708.html

你可能感兴趣的文章
es6中新增对象的特性和方法
查看>>
收集2012集群共享卷空间使用情况,并用邮件通知管理员
查看>>
varnish之ban.url无效的一种情况
查看>>
电话诈骗之思考|安全是什么?
查看>>
linux数据恢复
查看>>
Makefile.am讲解
查看>>
我在51CTO微职位学PMP_飘过攻略及心得分享
查看>>
Alfred 3 如何设置默认搜索引擎(以百度搜索为例)
查看>>
第二课unit3 系统延迟及定时机制
查看>>
十二月机房考核
查看>>
shell 类型
查看>>
网页中meta标记
查看>>
python爬虫笔记-day5
查看>>
Jenkins+newman 控制台输出样式
查看>>
公司业务转型,IT基础架构也要转型,京东云Docker容器集群微服务实践
查看>>
解释try_files $uri $uri/ /index.php$is_args$args;
查看>>
营销圈也可以提供类似“不涂口红的你”的创意文案?
查看>>
【源码分享】短信验证码功能对接CmsEasy
查看>>
学习linux入门之top命令的用法介绍
查看>>
MySQL的基础分部
查看>>