后缀数组
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
牛奶模式Milk Patterns
luoguP2852 题目描述Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he can’t predict the quality of milk fro原创 2017-03-31 20:38:41 · 2155 阅读 · 1 评论 -
后缀自动机(了解层面)
前言:我觉得这个比LCT还难学。。。orz 声明:资料来源: 1. 毛子的blog 2. 冬令营clj讲稿( 3. 曲神的blog 4. 后缀自动机的简短指南我们还是从定义开始 后缀自动机(或定向非循环字图)是一个强大的数据结构,可以解决许多字符串问题 例如,使用后缀自动机可以进行字符串匹配,或计算此字符串中的不同子串数,这两个问题都可以用线性时间解决原创 2018-01-05 18:38:52 · 436 阅读 · 0 评论 -
bzoj3998 [TJOI2015]弦论(SAM)
Description对于一个给定长度为N的字符串,求它的第K小子串是什么。Input 第一行是一个仅由小写英文字母构成的字符串S第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个。T=1则表示不同位置的相同子串算作多个。K的意义如题所述。Output输出仅一行,为一个数字串,为第K小的子串。如果子串数目不足K个,则输出-1Sample Inputaabc0 3Sample Out原创 2018-01-29 15:20:19 · 214 阅读 · 0 评论 -
SPOJ7258 SUBLEX - Lexicographical Substring Search(SAM第K大)
题目链接分析: SAM" role="presentation" style="position: relative;">SAMSAMSAM求第K" role="presentation" style="position: relative;">KKK大子串首先我们建出SAM" role="presentation" style="position: relative;">SAMSAMS原创 2018-01-29 19:00:26 · 262 阅读 · 0 评论 -
bzoj2882 工艺(SAM【iterator)
题目链接分析: 很简单啊,我们在原串后面再复制一遍原串 得到的就是环状的数串 利用这个串建立SAM" role="presentation" style="position: relative;">SAMSAMSAM,直接在SAM" role="presentation" style="position: relative;">SAMSAMSAM上找最小的子串即可但是有一个小问题,这原创 2018-01-29 20:17:58 · 415 阅读 · 0 评论 -
广义后缀自动机
之前简单介绍了SAMSAMSAM 朴素的SAMSAMSAM是针对一个字符串建立的 那么该如何对多个串建出后缀自动机呢?这个就叫广义后缀自动机首先我们考虑一个暴力的建造方法, 就是每次建完一个串以后就把last指针移到root上面,接着建下一个串发现时间复杂度其实依旧是O(n)O(n)O(n),而且匹配也不会出现啥问题。但是这样新加入一个点的时候可能已经有这个转移了,那该怎...原创 2018-01-30 09:00:26 · 536 阅读 · 0 评论 -
bzoj3926 [Zjoi2015]诸神眷顾的幻想乡
题目链接分析: 先强调一点,题目中特意指出:太阳花田的结构比较特殊,只与一个空地相邻的空地数量不超过20个 翻译一下:最多有20个叶结点知道这道题是用广义后缀自动机解决 广义SAMSAM中包含了所有互异的子串 所以我们应该把尽量少,但是包含所有情况的字符串扔进SAMSAM中一开始我想的比较简单,只要把所有叶结点到根的字符串扔进去就可以了 但是这样显然包括所有的字符串情况(画个图就知道了,没原创 2018-01-30 11:01:32 · 205 阅读 · 0 评论 -
bzoj2780 [Spoj]8093 Sevenk Love Oimaster
题目链接分析: 我一开始的想法比较简单,建出SAMSAM,每个结点记录有多少串使用了这个结点,直接匹配即可 结果竟然T了,按理来说也应该是WA啊在看学姐的blog的时候,发现实际上就是这么搞:我们直接用朴素的方法构建好SAMSAM 我们对每一个结点另开一个数组ll,表示当前每个结点属于哪个字符串 同时记录结点在多少个字符串中出现过:cntcnt 在构建完结点之后,我们从nownow开始往p原创 2018-01-30 15:56:36 · 262 阅读 · 2 评论 -
hdu5343 MZL's Circle Zhou(SAM+dp)
题目链接分析: 这道题是今天hu测T3的精简版 (先来搞简单一点的,hu测的题目太难了。。。)题意:给定两个长度不超过a,b(1 <= |a|,|b| <= 90000) x为a的连续子串,b为y的连续子串(x和y均可以是空串) 问x+y形成的不同串的个数?这时候出现了一个问题对于一个合法解,有可能中间存在一段即是A的子串,又是B的子串 那么此合法解就有多...原创 2018-02-12 20:31:07 · 296 阅读 · 0 评论 -
bzoj2555 SubString(LCT+SAM)
题目链接分析: 翻了一下这道题的提交记录,发现yhzq和Mario_sz两个月前就做过了(希望现在填坑还不算晚) 第一次看这道题,感觉就是一道SAM 支持动态添加?SAM可以啊 匹配?SAM也可以啊然而上网,得到都是LCT+SAMLCT+SAMLCT+SAM,直接把我吓傻了 朴素的后缀自动机,每个节点维护一个sizesizesize,添加一个字符时将它parentparentpa...原创 2018-03-24 10:52:20 · 330 阅读 · 0 评论 -
cv2303 [Sdoi2008 ] Sandy的卡片(后缀数组+二分)
DescriptionSandy和Sue的热衷于收集干脆面中的卡片。然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型。每一张卡片都由一些数字进行标记,第i张卡片的序列长度为Mi,要想兑换人物模型,首先必须要集够N张卡片,对于这N张卡片,如果他们都有一个相同的子串长度为k,则可以兑换一个等级为k的人物模型。相同的定义为:两个子串长度相同且一个串的全部...原创 2018-03-25 14:50:54 · 191 阅读 · 0 评论 -
SPOJ1812 LCS2 - Longest Common Substring II(SAM)
题目链接分析: SAM求多串最长公共子串 详解戳这里#include#include#includeusing namespace std;const int N=100002;int dis[N1],ch[N1][26],fa[N1],len,root=1,last=1,sz=1;int l[N1],c[N1],pos[N1],mn[N];char s[N];v原创 2018-01-28 20:02:49 · 184 阅读 · 0 评论 -
bzoj2946 [Poi2000]公共串(SAM)
Description给出几个由小写字母构成的单词,求它们最长的公共子串的长度。任务:读入单词 计算最长公共子串的长度输出结果 Input 文件的第一行是整数 n,1,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。 Output仅一行,一个整数,最长公共子串的长度。 Sample Input3 abcb bca acbc原创 2018-01-28 19:34:11 · 347 阅读 · 0 评论 -
找相同字符串(非AC代码,luogu上第一个点过不了TAT)
如题目所言 恳请大佬赐教。。。题目描述给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。输入输出格式输入格式: 两行,两个字符串s1,s2,长度分别为n1,n2。1 <=n1, n2<= 200000,字符串中只有小写字母输出格式: 输出一个整数表示答案输入输出样例输入样例#1: aabb bbaa输出样例#1:原创 2017-04-20 19:16:12 · 265 阅读 · 0 评论 -
poj1743Musical Theme
DescriptionA musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the piano. It is unfortunate but true that this represe原创 2017-03-30 20:10:40 · 239 阅读 · 0 评论 -
TyvjP1860 后缀数组
描述我们定义一个字符串的后缀suffix(i)表示从s[i]到s[length(s)]这段子串。 后缀数组(Suffix array)SA[i]中存放着一个排列,满足suffix(sa[i]) < suffix(sa[i+1]) 按照字典序方式比较 定义height[i]表示suffix(sa[i])与suffix(sa[i-1])之间的最长公共前缀长度,其中height[1]=0 你的任务就原创 2017-07-30 16:51:21 · 242 阅读 · 0 评论 -
bzoj3879 SvT(后缀数组+单调栈)
Description(我并不想告诉你题目名字是什么鬼)有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n].现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示),求这些后缀两两之间的LCP(LongestCommonPrefix)的长度之和.一对后缀之间的LCP长度仅统计一遍.Input第一行两个正整数n,m,分别表示S的长度以及询问的次数.接下来一行有原创 2017-12-23 18:56:34 · 377 阅读 · 0 评论 -
bzoj4180 字符串计数(SAM+二分+矩阵加速dp)
题目链接分析: 问题建立在字符串的子串上 而SAMSAMSAM包含了字符串的所有子串,所以可以往这个方向考虑一开始我设计的状态:f[i][j]f[i][j]f[i][j]表示第iii位是字符jjj,用的最大步数 然后我就很直接的想到,在转移的时候可以找到以jjj为起点的子串(j,...,k):len(j,...,k):len(j,...,k):len f[i+len−1][k]=m...原创 2018-01-30 20:44:46 · 393 阅读 · 0 评论 -
bzoj4032 [HEOI2015]最短不公共子串(字符串dp+SAM)
题目链接分析: 字符串dp四合一 比较神的一道题,一开始只会搞第一问 然而发现自己的方法不是很靠谱First.A子串≠B子串实际上就是求两个串的最长公共子串 f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]f[i][j]表示A序列第i" role="presentation" st原创 2018-01-31 09:50:57 · 318 阅读 · 0 评论 -
SAM的性质与应用
鸣谢clover_hxy学姐之前介绍过SAMSAMSAM的构建 打算做点题练习一下,但是找到SAMSAMSAM的裸题之后,根本不知道怎么用SAMSAMSAM搞 所以就来总结一下SAMSAMSAM的应用找不同的子串的个数方法一:用dfs处理处每个点能扩展出多少个字符串sum[x]=∑sum[t[x].son[i]]+1sum[x]=∑sum[t[x].son[i]]+1sum[x...原创 2018-01-28 16:43:42 · 1200 阅读 · 0 评论 -
bzoj2806 [Ctsc2012]Cheat(单调队列优化dp+二分+广义SAM)
题目链接分析: 一看到这种最大值的问题,冥冥之中可以感知到是二分在召唤我们我们把所有的标准串扔到SAM" role="presentation" style="position: relative;">SAMSAMSAM里,建出一个广义后缀自动机 二分一个L" role="presentation" style="position: relative;">LLL,用dp判断可行性 怎原创 2018-01-31 15:42:28 · 261 阅读 · 0 评论 -
cv3160 最长公共子串(SAM)
题目链接分析: A" role="presentation" style="position: relative;">AAA串建立一个SAM" role="presentation" style="position: relative;">SAMSAMSAM 用B" role="presentation" style="position: relative;">BBB串在SAM" role原创 2018-01-28 15:50:30 · 421 阅读 · 0 评论 -
bzoj4453 cys就是要拿英魂!(后缀数组+单调栈+二分)
Descriptionpps又开始dota视频直播了!一群每天被pps虐的蒟蒻决定学习pps的操作技术,他们把pps在这局放的技能记录了下来,每个技能用一个字符表示。经过研究,蒟蒻们发现字典序更大的连招威力更大。于是所有蒟蒻都想学习pps最强的连招。但是他们太弱了,不能学会整个视频里的连招,只能学会陈老师一段区间间内的连招,可是这个他们求不出,于是只好向你求助。为了蒟蒻们不再被pps虐(怎么可...原创 2018-04-01 08:26:17 · 425 阅读 · 0 评论