![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀自动机
fyc_kabuto
一个蒟蒻程序员
展开
-
4556: [Tjoi2016&Heoi2016]字符串(后缀自动机做法)
题目大意:给出两段区间,求其中一段的所有子串与另一段的最长公共前缀。做法:听说可以用后缀数组作,不过忘得差不多了,与是愉快的敲了sam。好像还挺有收获的。首先原串反过来建,这样题目就转化成了一段的所有子串与另一段的最长公共后缀,这样就可以识别了。假设要在s【a,b】中找最长后缀在s【c,d】中出现过(反串后),那么我们先找到以b结尾的前缀在parent树上的位置,接着我们二分答案m原创 2017-07-05 15:18:51 · 576 阅读 · 0 评论 -
loj 6031. 「雅礼集训 2017 Day1」字符串
题意:题解:因为保证qk&lt;105qk&lt;10^5qk<105,所以对于q<k,即q&lt;300q&lt;300q<300的点,直接sam+倍增O(mqlogn)O(mqlogn)O(mqlogn)然后就有90分了对于k&lt;300k&lt;300k<300,暴力枚举每个子串,然后在vector上二分,看下...原创 2018-12-25 14:24:10 · 486 阅读 · 0 评论 -
codeforces 666E. Forensic Examination
题意:给一些模式串,每次询问询问串的子串在[l,r][l,r][l,r]中的哪个模式串出现最多。题解:好久久久久久久久久久久久久没写字符串相关,调的简直心态爆炸。 直接建出广义sam,每次就相当于询问一个子树的众数。 用可持久化线段树合并即可。 具体细节见代码,线段树合并很久没写写错几次。 code:#include<vector>#include<cs...原创 2018-08-07 08:54:45 · 273 阅读 · 0 评论 -
计蒜客 A String Game
题意:给出一个串t和n个t的子串s[1..n]s[1..n]s[1..n]。两个人轮流操作,每次可以选择一个串s[i]s[i]s[i],然后在s[i]s[i]s[i]的最后添上一个字符串,满足得到的新串仍然是t的子串。不能操作者输,问先手必胜还是后手必胜。 t≤105,∑|s[i]|≤3∗107t≤105,∑|s[i]|≤3∗107t≤10^5,∑|s[i]|≤3∗107题解:...原创 2018-04-25 08:56:37 · 368 阅读 · 0 评论 -
bzoj 1921: [Ctsc2010]珠宝商
题意:给一棵树,每个点上有一个字母,问对于所有(x,y),求x到y的路径所组成的字符串在S中出现次数的和。题解:先上题解:begined CTSC2010 珠宝商新解 然后说说个人的垃圾理解。 首先考虑暴力,一种显然的做法就是从每个点开始dfs整棵树,顺便在sam上走,那么每次加上right集合的大小即可。 然后考虑一种没那么显然的暴力。 枚举lca,然后将路径拆成,(x...原创 2018-04-12 09:33:34 · 449 阅读 · 0 评论 -
bzoj 4180: 字符串计数
题意:SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999。 他给出了一个字符串T,字符串T中有且仅有4种字符 ‘A’, ‘B’, ‘C’, ‘D’。现在他要求蒟蒻yts1999构造一个新的字符串S,构造的方法是:进行多次操作,每一次操作选择T的一个子串,将其加入S的末尾。 对于一个可构造出的字符串S,可能有多种构造方案,Oxer定义构造字符串S所...原创 2018-03-20 21:50:53 · 293 阅读 · 0 评论 -
bzoj 1396: 识别子串
题意:给出一个字符串,对于每一个位置,求出最短的包含它的只在串中出现一次的子串长度。题解:建出sam,然后处理right集合为1的串。 然后线段树维护两个东西,一个以它为左端点,最靠左的合法右端点。 一个是直接包含的答案。 code:#include<cstdio>#include<cstdlib>#include<cstring>...原创 2018-03-19 20:54:31 · 225 阅读 · 0 评论 -
bzoj 5137: [Usaco2017 Dec]Standing Out from the Herd
广义SAM原创 2018-01-09 11:34:05 · 557 阅读 · 0 评论 -
bzoj 2555: SubString
题意:在线增加末尾字符,在线询问子串出现次数。题解:lct维护sam的right。 link时把x到根的路径标记一下,cut时也标记一下。 自己YY的竟然能A。 话说我的lct好慢啊。 code:#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;struct原创 2017-08-26 18:30:51 · 311 阅读 · 0 评论 -
3172: [Tjoi2013]单词
后缀自动机模板题。2012年noi冬令营陈立杰讲稿(SAM后缀自动机)这个写的不错,一定要耐心看。code:#include#include#include#includeusing namespace std;struct SAM{ int par,max,a[28];}sam[2500000];int root=1,tot=1,tail=1,ri[2原创 2017-07-09 08:47:16 · 346 阅读 · 0 评论 -
bzoj 3879: SvT
题目大意:求若干个后缀两两减的LCP之和。后缀总和不大于3*10^6;后缀自动机加虚树。看这种询问有多,总点不太多的又在一棵树上可以考虑虚树。把原串反过来,等于求前缀的最长公共后缀。首先有个显然的性质是两个前缀的LCS是它们在parent树上的lca的max。如果不了解的可以先做这题:点击打开链接见虚树后,跟bzoj3238一样,在树上统计答案就行了。ans要除二,因为两两原创 2017-07-15 11:11:06 · 302 阅读 · 0 评论 -
uoj 395. 【NOI2018】你的名字
题意:给出一个模式串SSS,多次询问询问串有多少本质不同的子串在s[l,r]s[l,r]s[l,r]中没有出现。题解:这题好像不是很难首先68分比较sb,对于每个TTT的前缀,只要能求出最短的还没有在TTT中出现过的,和最短的还没有在SSS中出现过的后缀,就能计算这个前缀的贡献。转为求最长的出现过的,就是sam经典操作。现在加上了l,rl,rl,r这个限制,影响的只有在SSS中的的部分...原创 2019-01-24 11:14:38 · 337 阅读 · 2 评论