![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串算法
文章平均质量分 93
处理acm算法竞赛中的字符串问题
学不完,根本学不完
本科,双非,码农
展开
-
广义后缀自动机 练习题从入门到精通
我们考虑对sam进行二进制重构,即把当前已添加的串按数量1,2,4,8...分组,一共logn组,对每一组都构建sam然后计算一遍子串出现次数,查询的时候对每一组都分别查询一次,总共查询logn次,在添加串时先将其作为数量为1的sam,然后合并大小相同的sam,每次合并的sam大小是log(串总长度)的,合并完后重新计算子串出现次数即可。对于删除操作,我们只需要对删除的串都放到一个与添加串相同的环境下即可,每次查询的答案就是添加串的集合的出现次数-删除串的集合的出现次数。原创 2023-03-29 23:15:25 · 166 阅读 · 0 评论 -
后缀自动机 练习题从入门到精通
思路:对文本串s建立sam并用线段树合并维护好endpos,询问串t时对串t遍历,同时在s的sam上匹配,维护好串t的每个前缀在s[l,r]中出现的最长后缀长度maxl(可能有点绕,要仔细理解),最后对t建sam,遍历每个sam节点计算其在s[l,r]中出现的本质不同子串数,注意细节问题你就解决了一道洛谷黑题。先把link树建出来,预处理倍增,然后线段树合并维护好endpos,对于每次查询先倍增跳到对应的节点即s[l,r]所在的节点,然后在对应的线段树上查询出现在[L+r-l, R]中的标记数量。原创 2023-03-24 21:34:53 · 251 阅读 · 0 评论