随笔分类 - 字符串-后缀自动机
摘要:"http://uoj.ac/problem/103" 由manacher得:本质不同的回文串只有$O(n)$个。 用manacher求出所有本质不同的回文串,对每个本质不同的回文串,在后缀自动机的parent树上倍增求一下它出现了多少次,更新答案。 时间复杂度$O(n\log n)$。
阅读全文
摘要:"http://www.spoj.com/problems/JZPGYZ/" 查询一个询问串在上面n个串中多少个串的子串。 后缀数组+主席树,常熟有点大。。。 建出广义SAM,利用parent树的dfs序,每次相当于询问parent树的一个子树中出现了多少不同的颜色。 可以用主席树统计,pre表示d
阅读全文
摘要:"http://www.lydsy.com/JudgeOnline/problem.php?id=3238" 后缀数组裸题但是$5\times 10^5$貌似常数有点大就过不了?(我的sa常数那么大想了想还是算了吧qwq) 两个后缀的lcp就是反串的后缀自动机上两个状态在parent树上的lca,l
阅读全文
摘要:"http://www.lydsy.com/JudgeOnline/problem.php?id=3926" 广义后缀自动机的例题,感觉广义后缀自动机好恶心。。。 广义后缀自动机是对一个trie建立的后缀自动机,能识别trie上的所有子串。right集合代表的是trie树上的节点集合。 具体做法是把
阅读全文
摘要:"http://hihocoder.com/problemset/problem/1466" 建出A串和B串的两个后缀自动机 对后缀自动机的每个状态求出sg值。 求出B串的$sum(x)$,表示B有多少子串的sg值等于x(用拓扑序求)。 对A串的每个状态,求出B串有多少子串的sg值不等于这个状态的s
阅读全文
摘要:"http://www.spoj.com/problems/SUBLEX/" 好难啊。 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量。该状态能走到的所有状态的f值的和+1就是当前状态的f值。 最后对于询问的k,从root开始走顺便加加减减就可以了。
阅读全文
摘要:"http://www.lydsy.com/JudgeOnline/problem.php?id=4516" 后缀自动机直接做。。。省选时cena评测竟然没有卡掉map 每次加一个字符,增加的子串数目为np的max减去np的值parent的max值。 时间复杂度$O(nlogn)$。 c++scri
阅读全文
摘要:"http://www.spoj.com/problems/LCS2/" 这道题想了好久。 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离。每匹配完一个串要对每个状态往它的parent更新,因为状态记录的最长距离一定大于parent的val值,所以
阅读全文
摘要:"http://www.lydsy.com/JudgeOnline/problem.php?id=2555" 一个字符串在原串中的出现次数就是这个字符串对应后缀自动机上的状态的$|Right|$,要求parent树中这个状态的子树中叶子节点的个数。 因为强制在线,所以用lct维护parent树以及树
阅读全文
摘要:"http://www.spoj.com/problems/NSUBSTR/" clj课件里的例题 用结构体+指针写完模板后发现要访问所有的节点,改成数组会更方便些。。于是改成了数组。。。 这道题重点是求一个状态的$|Right|$值,只要用parent树中当前节点的所有孩子来更新它即可。 为了保证
阅读全文
摘要:"http://codevs.cn/problem/3160/" 看了好久的后缀自动机_(:з」∠)_ 对A串建立SAM,用B串去匹配A串SAM,如果在当前节点走不下去,就跳到当前节点的parent(类似AC自动机的失配指针),找到当前节点代表的状态中长度最长的后缀,并看能不能继续走下去。 如果跳到
阅读全文