【分块+回文自动机】LibreOJ6070(2017 山东一轮集训 Day4)[基因]题解

博客介绍了如何使用分块和回文自动机解决在线询问字符串中本质不同回文字串个数的问题。通过前端插入和记忆化技术优化算法,实现了高效处理区间查询。
摘要由CSDN通过智能技术生成

题目概述

给出一个由小写字母构成的字符串,有 m 个询问 [l,r] ,表示求 s[l..r] 中本质不同回文字串的个数,强制在线。

解题报告

因为强制在线询问区间,所以我们想到分块。以每个块的左端点开始构造后缀的回文自动机,就可以得到 ans[i][j] 表示从第 i 个块左端点开始到 j 中不同回文子串的个数。

然后对于每个询问,我们都只需要查询至多一个块中不同回文子串的个数(记录一些信息比如回文自动机此时的指针,以及是否与预处理的答案有重复),效率就有保证了。

回文自动机大佬可以无视下面的一大段

整理一下,我们需要实现两个操作:1.前端插入。2.“记忆化”。这两个其实翁文涛的论文里都有提到,我就盗过来简单分析一下。

前端插入

不妨在回文树上对每个节点再维护一个 fail 指针,表示这个节点的最长回文前缀指向的节点,那么每次加入新字符的时候,只需要沿着 s 的最长回文前缀的 fail 链找到一个最长的合法的 t 即可。

……

所以, t 的回文前缀与回文后缀的字符串集合其实是相同的。也就是说,回文树上一个节点的 f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值