随笔分类 -  字符串算法 -- 后缀自动机

摘要:【BZOJ3998】弦论(后缀自动机) 题面 "BZOJ" 题解 这题应该很简单 构建出$SAM$后 求出每个点往后还能构建出几个串 按照拓扑序$dp$一些就好了 然后就是第$k$大,随便搞一下就好 阅读全文
posted @ 2018-02-15 20:12 小蒟蒻yyb 阅读(374) 评论(4) 推荐(0) 编辑
摘要:【BZOJ4566】找相同字符(后缀自动机) 题面 "BZOJ" 题解 看到多串处理,$SA$就连起来 $SAM???$ 单串建自动机 然后其他串匹配 对于一个串建完$SAM$后 另一个串在$SAM$上匹配 记录当前匹配的最大长度 匹配了当前位置的话,就能产生一定的贡献 但是很显然,沿着$paren 阅读全文
posted @ 2018-02-15 11:29 小蒟蒻yyb 阅读(388) 评论(0) 推荐(0) 编辑
摘要:【BZOJ2555】SubString(后缀自动机,Link Cut Tree) 题面 "BZOJ" 题解 这题看起来不难 每次要求的就是$right/endpos$集合的大小 所以搞一个$LCT$维护一下$SAM$的$Parent$树就好了 但是代码一点都不好写(我还是对着黄学长的调的。。。) 于 阅读全文
posted @ 2018-02-14 17:14 小蒟蒻yyb 阅读(539) 评论(0) 推荐(0) 编辑
摘要:【HDU4622】Reincarnation(后缀自动机) 题面 "Vjudge" 题意:给定一个串,每次询问l~r组成的子串的不同子串个数 题解 看到字符串的大小很小 而询问数太多 所以我们预处理任意的答案 枚举左端点,依次向右加入新节点 直接统计答案即可 cpp include include 阅读全文
posted @ 2018-02-13 12:50 小蒟蒻yyb 阅读(538) 评论(1) 推荐(0) 编辑
摘要:【SPOJ】Substrings(后缀自动机) 题面 "Vjudge" 题意:给定一个长度为$len$的串,求出长度为1~len的子串中,出现最多的出现了多少次 题解 出现次数很好处理,就是$right/endpos$集合的大小 那么,直接构建$SAM$ 求出每个位置的$right$集合大小 直接更 阅读全文
posted @ 2018-02-13 11:59 小蒟蒻yyb 阅读(429) 评论(0) 推荐(0) 编辑
摘要:【SPOJ】Longest Common Substring II (后缀自动机) 题面 "Vjudge" 题意:求若干个串的最长公共子串 题解 对于某一个串构建$SAM$ 每个串依次进行匹配 同时记录$f[i]$表示走到了$i$节点 能够匹配上的最长公共子串的长度 当然,每个串的$f[i]$可以更 阅读全文
posted @ 2018-02-13 11:50 小蒟蒻yyb 阅读(364) 评论(0) 推荐(0) 编辑
摘要:【SPOJ】Longest Common Substring(后缀自动机) 题面 "Vjudge" 题意:求两个串的最长公共子串 题解 $SA$的做法很简单 不再赘述 对于一个串构建$SAM$ 另外一个串在$SAM$上不断匹配 最后计算答案就好了 匹配方法: 如果$trans(s,c)$存在 直接沿 阅读全文
posted @ 2018-02-13 11:44 小蒟蒻yyb 阅读(317) 评论(0) 推荐(0) 编辑
摘要:【Luogu3804】【模板】后缀自动机(后缀自动机) 题面 "洛谷" 题解 一个串的出现次数等于$right/endpos$集合的大小 而这个集合的大小等于所有$parent$树上儿子的大小 这样子的话,给每个终止位置的$size$记为$1$ 然后按照拓扑序累加,这就是$right/endpos$ 阅读全文
posted @ 2018-02-13 11:37 小蒟蒻yyb 阅读(455) 评论(0) 推荐(0) 编辑
摘要:【SPOJ】Distinct Substrings(后缀自动机) 题面 "Vjudge" 题意:求一个串的不同子串的数量 题解 对于这个串构建后缀自动机之后 我们知道每个串出现的次数就是$right/endpos$集合的大小 但是实际上我们没有任何必要减去不合法的数量 我们只需要累加每个节点表示的合 阅读全文
posted @ 2018-02-13 11:34 小蒟蒻yyb 阅读(446) 评论(0) 推荐(0) 编辑