![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀自动机
Facico
生命是闪耀的此刻,不是过程,就像芳香不需要道路一样。
展开
-
【GDOI2012】字符串
Descriptionmmm正在学习字典序。现在老师给她布置了一个作业:给出一个字符串,问该字符串的所有不同的子串中,按字典序排第K的字串。由于众所周知的原因,mmm需要你为她解决这个问题。Solution这里与TJOI2015弦论几乎是一样的,比那题还要水很多。 根本就不用担心爆栈什么的。 后缀自动机直接秒过。Code#include<iostream> #include<cstdio>#原创 2016-08-16 21:49:29 · 978 阅读 · 0 评论 -
【GDOI2017 day1】微信
Description题意就是,给你n个字符串,然后给你一些二进制,然后求二进制为1的位置他们的最长公共子串。Solution这就是一道SAM的裸题。 构出一颗trie,然后trie上建SAM(要用bfs来建),然后每个节点标记一个二进制,最后每个fail树上的父亲把儿子的标记全部or起来。 然后把这个二进制状态更新到子集上,如果3n3^n枚举子集会超时,随意要1位位的往下转移2nn2^nnCo原创 2017-05-07 08:26:35 · 751 阅读 · 0 评论 -
【GDOI2017模拟二试4.12】旅游路线(后缀自动机,trie)
DescriptionA君准备在Z国进行一次旅行,Z国中有n个城市,城市从1到n进行编号,其中1号城市为Z国首都。Z国的旅行交通网由n-1条单向道路构成,并且从任何一个城市出发都可以通过旅行网到达首都。 一条旅行交通网中的旅行线路,可以用线路上所经过的城市来描述,如{v1,v2,v3,……,vm},它表示一条经过了m个城市的旅行路线,且城市vi到城市vi+1有一条单向道路相连。 两个城市是相似的原创 2017-04-16 11:37:54 · 527 阅读 · 0 评论 -
后缀自动机学习小记
简介后缀三姐妹:后缀数组,后缀自动机,后缀树。 后缀自动机:Suffix Automation,也叫SAM。 创立算法的思路来源:能不能构出一个自动机(本质就是一个有向图),能识别一个串的所有后缀。识别所有后缀基础想法把所有的后缀都放进一个trie里面,比如串aabbabd。 这样的状态太多了,怎么把状态数缩小。减小状态数的方法定义一个子串的right集合为这个子串在原串中出现的右端点集合原创 2016-08-18 22:11:24 · 5182 阅读 · 4 评论 -
【51Nod1292】字符串中的最大值
Description有一个字符串T。字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度)。求所有T的子串S中,函数F(S)的最大值。Solution也是后缀自动机的经典操作。 我打的这题才发现,我打字符串中的最大值是有一个bug,不过有这个bug也可以拿好多分。 在每个串出现的次数的初始化时,只有每个1~n对应的点才有值,很显然(即cc[np]=1)。原创 2016-09-19 22:18:39 · 778 阅读 · 0 评论 -
【51Nod1277】字符串中的最大值
Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的原创 2016-09-19 22:13:07 · 1065 阅读 · 0 评论 -
【SDOI2016】生成魔咒
Description魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。例如可以将魔咒字符 1、2 拼凑起来形成一个魔咒串 [1,2]。 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒。 例如 S=[1,2,1] 时,它的生成魔咒有 [1]、[2]、[1,2]、[2,1]、[1,2,1] 五种。S=[1,1,1] 时,它的生成魔咒有 [1]、[1,1]、[1,1,1] 三种。 最初 S原创 2016-08-18 16:59:00 · 1339 阅读 · 0 评论 -
【ZJOI2015】诸神眷顾的幻想乡
DescriptionSolution题意:有一个n个节点的树,每一个节点上有一个字符,定义路径为两点之间的字符组成的字符串,求有多少种不同的路径。trie上建SAM原图就是一个trie 很明显可以trie上打一个SAM,但是还是有一些从下到上的路径没有概括到。依次把所有叶子节点视为根节点依次把每个叶子节点视为根节点建一棵trie,然后做后缀自动机,这样就可以把每个叶子方向开始的路径概括到。 其原创 2016-08-18 16:19:20 · 1221 阅读 · 0 评论 -
【TJOI2015】【BZOJ3998】弦论
DescriptionSolution后缀三姐妹都可以做这题。 我选择最短的。后缀自动机不会的参照后缀自动机学习小记 建出后缀自动机。 先对后缀自动机拓扑一下(其实是为了方便求构出的字符串的个数和right集合的个数),其实不用真的求拓扑序,把len排个序就好了,很显然len的顺序就是拓扑序。 然后求出当前这个状态right的集合的大小(表示这个状态的字符串出现了多少次)。 那么求答案一个原创 2016-08-16 20:52:57 · 1948 阅读 · 0 评论