后缀自动机
文章平均质量分 59
ZigZagK
一个蒟蒻。
展开
-
【后缀自动机】SPOJ(LCS2)[Longest Common Substring II]题解
题目概述求n个串的最长公共子串。解题报告这道题是SPOJ1811的升级版,还是可以用SAM解决。 我们先对第一个字符串构造SAM,然后和SPOJ1811一样用其他串和SAM进行匹配,只不过由于有多个串,我们不能直接刷最大值来求LCS。所以我们将SAM的每个状态都添加一个min记录其他串到此状态时的最小匹配长度(当然无论如何min都不超过该状态的最大子串长度MAX)。那么答案就是所有min中的最大值吗?其原创 2017-07-06 18:16:23 · 1046 阅读 · 3 评论 -
【后缀自动机】SPOJ(LCS)[Longest Common Substring]题解
题目概述给出两个串A和B,求A和B的最长公共子串。解题报告这道题是SAM的经典应用,首先先提醒一下不要一看到LCS就想到最长公共子序列去了,这里是最长公共字串…… SAM真的是很神的字符串算法啊,不仅复杂度是线性的,还非常好写,但是真的太神了,所以很多可以用SAM的地方还需要各种转化。 我们先对A串建立SAM,那么现在我们就可以识别A的所有子串了。我们按顺序枚举B的前缀i,判断该前缀的后缀是否出现在A原创 2017-07-05 19:52:19 · 575 阅读 · 2 评论 -
后缀自动机SAM
后缀自动机SAM总结。原创 2017-07-05 19:30:43 · 1771 阅读 · 3 评论 -
【后缀自动机】HDU4622[Reincarnation]题解
HDU4622题解。原创 2017-07-06 08:31:48 · 796 阅读 · 1 评论 -
【后缀自动机+阈值优化】HackerRank(Week of Code 30)[Substring Queries]题解
题目概述给出n个串和T个询问,每个询问求x串y串的最长公共子串。解题报告两个串的最长公共子串(下文简称LCS)可以用SAM方便的求出。那么这道题可以先对所有串预处理出SAM,然后就可以快速求出两个串的LCS了。 但这样还是不够快,我们可以采取这样的策略:由于一个长度为len的串与任意一个SAM匹配的时间都是O(len)O(len),所以对于两个串A,B,让长度小的串和长度大的串的SAM匹配较好。原创 2017-07-14 22:21:08 · 890 阅读 · 0 评论 -
【后缀自动机】POJ1509[Glass Beads]题解
题目概述给出小写环形字符串,问在哪个位置断开形成的字符串字典序最小(相同取靠前)?解题报告学了后缀自动机像一场梦一样……现在tm一点都不记得了QAQ。回顾:Right集合,father(parent)树,根据这两个东西脑补出拓展函数,千万别把自动机和father(parent)树搞混。这道题就是陈老师ppt上的那道题,先建好后缀自动机,然后每次跑编号最小边,就得到答案了。原创 2018-01-05 19:45:22 · 386 阅读 · 0 评论 -
【后缀自动机+LCT】BZOJ2555[SubString]题解
题目概述给出初始字符串 initinit 和 mm 个操作,操作有两种:1.在当前字符串后插入一个字符串。2.询问一个字符串在当前字符串中的出现次数。强制在线。解题报告(之前做了后缀自动机和LCT就tm为了这道题)强制在线插入询问,后缀数组,KMP全都不行。数据范围又贼大,我们想到后缀自动机。后缀自动机求字符串 ss 出现次数:先识别 ss ,若无法识别,答案为 00 ,否则答原创 2018-01-08 08:24:25 · 431 阅读 · 0 评论 -
【后缀自动机】BZOJ5084[hashit]题解
题目概述给出一个操作串:如果是小写字母,表示在当前字符串后面添加这个小写字母。如果是 −" role="presentation">−−- ,表示删除当前字符串最后的小写字母(保证合法)。求每次操作后当前字符串不同子串的个数。解题报告不同子串个数是后缀自动机裸题,由于每次只删除最后一个小写字母,所以瞎搞就行了……好像也可以后缀平衡树?但是我不会QAQ。示例原创 2018-02-03 19:08:37 · 809 阅读 · 2 评论