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

摘要:4556: [Tjoi2016&Heoi2016]字符串 链接 分析: 首先可以二分这个长度。此时需要判断是否存在一个以b结尾的前缀,满足与[c,d]的lcp大于等于mid。 如果我们把串翻转,那么就是判断是否存在一个以b开始的后缀,这样可以建出SAM,线段树维护每个点的right集合。此时在从包含 阅读全文
posted @ 2019-03-14 22:05 MJT12044 阅读(290) 评论(0) 推荐(0)
摘要:E. Cool Slogans 链接 题意: 给定一个字符串S,从中选出k个子串a[1],a[2]...a[k],满足a[i]在a[i+1]中出现了两次(可以重叠),求最大的k。 分析: 建出SAM,在parent树上dp,dp[i]表示到第i个点,最多选了多少个子串,那么如果fa[i]在i中出现了 阅读全文
posted @ 2019-02-13 11:41 MJT12044 阅读(279) 评论(0) 推荐(0)
摘要:4516: [Sdoi2016]生成魔咒 链接 题意: 求本质不同的子串。 分析: 后缀数组或者SAM都可以。 考虑SAM中每个点的可以表示的子串是一个区间min(S)~max(S),把每个点的这个区间加起来即可。 字符集有点大,可以用map。 代码: 阅读全文
posted @ 2019-02-12 21:49 MJT12044 阅读(166) 评论(0) 推荐(0)
摘要:2555: SubString 链接 题意: 动态在末尾加入一个字符串,询问一个字符串出现了多少次。 分析: 如果没有动态加入,那么建出SAM后,求出parent树上,每个点|Right|,然后走一遍找到对应的点,这个点的Right集合的大小就是答案。 求Right可以从叶子结点往上走一遍。 考虑动 阅读全文
posted @ 2019-02-12 21:06 MJT12044 阅读(194) 评论(0) 推荐(0)
摘要:Suffix Automaton 简要记一下关于后缀自动机的知识。 Pre knowledge 有限状态自动机:功能是识别字符串,令一个自动机A,若它能识别字符串S,就记为A(S)=True,否则A(S)=False。 组成:alpha:字符集,state:状态集合,init:初始状态,end:结束 阅读全文
posted @ 2019-02-12 10:38 MJT12044 阅读(288) 评论(2) 推荐(2)
摘要:3277: 串 https://www.lydsy.com/JudgeOnline/problem.php?id=3277 分析: 广义后缀自动机是什么? 广义后缀自动机不就是把很多串的SAM建到了一个SAM上,建每个串的时候都从root开始(last=root)就行了。 广义后缀自动机是Trie树 阅读全文
posted @ 2018-07-20 17:33 MJT12044 阅读(227) 评论(0) 推荐(0)
摘要:SUBLEX - Lexicographical Substring Search 链接 题意 求第k小的子串。相同的算一个。 分析 建立后缀自动机,在后缀自动机上从一个点经过trans,到另一个点,trans会对应一个子串。而且会对应所有的子串。 每个节点能经过trans到达的点,即它可以形成的子 阅读全文
posted @ 2018-07-19 17:31 MJT12044 阅读(350) 评论(0) 推荐(0)
摘要:LCS2 - Longest Common Substring II 链接 题意: 求N(N<=10)个串的最长公共子串。 分析: poj2774上那道题,对一个串建立后缀自动机,另一个在上面匹配。 这道题是对多个串求。那么同样,让每个串在后缀自动机上匹配,然后记录在后缀自动机的每个节点上记录,当前 阅读全文
posted @ 2018-07-19 14:59 MJT12044 阅读(290) 评论(0) 推荐(1)
摘要:NSUBSTR - Substrings 链接 题意: 给一个字符串S,求长度为x的所有子串中,这些子串其中一个串的出现次数最多,求这个值。x=1,2,3....n 分析: 后缀自动机。 right集合表示当前状态在出现在其他的位置。len为当前状态的最大的串。parent树中,父节点的right包 阅读全文
posted @ 2018-07-19 11:11 MJT12044 阅读(226) 评论(0) 推荐(0)
摘要:POJ 2774 Long Long Message 链接 题意 求两个串最长公共子串。 思路 后缀数组:把两个串接在一起,求后缀数组和height,扫一遍即可。 height是后缀数组排序后的排名相邻的两个串的公共前缀,那么两个串的最长公共子串一定是:两个排名相邻的串的公共前缀,(不能是不相邻的, 阅读全文
posted @ 2018-05-04 07:55 MJT12044 阅读(165) 评论(0) 推荐(0)