后缀数组
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 4650: [Noi2016]优秀的拆分 后缀数组
题意如果一个字符串可以被拆分为 AABB 的形式,其中 A 和 B 是任意非空字符串,则我们称该字符串的这种拆分是优秀的。例如,对于字符串 aabaabaa,如果令 A=aab,B=a,我们就找到了这个字符串拆分成 AABB 的一种方式。一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。比如我们令 A=a,B=baa,也可以用 AABB 表示出上述字符串;但是,字符串 abaabaa原创 2018-01-20 17:05:51 · 283 阅读 · 0 评论 -
Codeforces 504E Misha and LCP on Tree 树链剖分+后缀数组
题意给一棵树,每个节点上有一个字符。每次询问a到b的路径组成的字符串和c到d的路径组成的字符串的lcp。 n<=300000,q<=1000000分析我们可以先重链剖分一下,然后把每条重链正着放一遍反着放一遍,这样就形成了一个字符串,建出这个字符串的后缀数组。 询问的时候,把路径上的O(log)个区间拿出来,然后扔到后缀数组里面求lcp就好了。 时间复杂度O(nl...原创 2018-03-08 16:39:08 · 412 阅读 · 0 评论 -
bzoj 4310: 跳蚤 后缀数组+二分答案
题意给一个长度为n的字符串,要求将其分成不超过m个连续部分,使得分割后所有子串中字典序最大的子串字典序尽量小。 n<=100000分析一开始没想到原来字符串也可以二分答案。。。 那么我们就先二分答案是第几小的子串,求第k大子串可以用sa来搞。 因为我们用的是后缀数组,所以考虑从后往前贪心。 若当前后缀p的字典序小于第k大的串,就直接跳过,否则就求它们的lcp。 若l...原创 2018-03-08 20:44:37 · 420 阅读 · 0 评论 -
bzoj 3796: Mushroom追妹纸 后缀数组
题意给出三个字符串S1,S2,S3,求一个最长的字符串T,满足T是S1和S2的公共子串且S3不是T的子串。 |S1|,|S2|<=50000,|S3|<=10000分析先把三个串搞在一起建后缀数组,然后对于前两个串的每个后缀,求出该后缀在保证不包含S3的前提下最多可以取多少长度。 然后我们二分答案,设为mid,那么就可以把后缀数组分成若干段,使得每一段两两之间的lc...原创 2018-03-08 21:49:34 · 220 阅读 · 0 评论 -
bzoj 2865: 字符串识别 后缀数组+线段树
题意在这个问题中,给定一个字符串S,与一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件: 1、i≤K≤j。 2、子串T只在S中出现过一次。 例如,S=”banana”,K=5,则关于第K位的识别子串有”nana”,”anan”,”anana”,”nan”,”banan”和”banana”。 现在,给定S,XX希望知道对于S的每一位,最短的识别子串长度是...原创 2018-03-09 15:06:04 · 339 阅读 · 0 评论 -
bzoj 5073: [Lydsy1710月赛]小A的咒语 后缀数组+RMQ+贪心+dp
题意给出两个字符串A,B和一个常数x,问能否从A中取不超过x段出来,将其按原来顺序拼接后可以组成B。 n,m≤105,x≤100n,m≤105,x≤100n,m\le10^5,x\le100分析我们可以设f[i,j]表示A的前i个字符选了j段出来能拼成的B的最长前缀是多少。 用后缀数组+RMQ即可做到O(1)O(1)O(1)转移。代码#include<iost...原创 2018-04-26 16:04:45 · 263 阅读 · 0 评论 -
LibreOJ #6198.谢特 后缀数组+并查集+trie启发式合并
题意给出一个长度为nnn的字符串SSS,以SiSiS_i为开头的后缀有一个权值wiwiw_i。对于两个不同的后缀SufiSufiSuf_i和SufjSufjSuf_j,定义其价值为lcp(Sufi,Sufj)+wi⊕wjlcp(Sufi,Sufj)+wi⊕wjlcp(Suf_i,Suf_j)+w_i\oplus w_j,问所有后缀中两两价值的最大值。 n,wi≤100000n,wi≤1000...原创 2018-05-28 10:45:39 · 342 阅读 · 0 评论 -
bzoj 3230: 相似子串 后缀数组+rmq+二分
题意 N≤100000,Q≤100000,字符串只由小写字母’a’~’z’组成分析一开始是想写sam的,然后发现貌似sam我只会两个log而且比sa更难写,于是还是写了sa。 这题只要把sa求出来之后根据height数组求出每个后缀有多少个本质不同的子串,然后在上面二分即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#incl原创 2017-12-21 19:06:13 · 278 阅读 · 0 评论 -
51nod 1440 迈克打电话 后缀数组+可持久化线段树+二分
题意有n只熊,从1到n进行编号。 第i只熊的电话号码是si。每只熊会给那些电话号码是他的子串的熊打电话(可能会给自己打)。 call(i, j) 表示第i只熊给第j只熊打电话的次数,也就是第j个串在第i个串中出现的次数。 迈克会有q次询问。每个询问中给出l,r,k,然后请您计算一下∑ri=lcall(i,k)\sum_{i=l}^rcall(i,k)。 1 ≤ n ≤ 2 × 10^5 ,原创 2017-10-25 15:41:31 · 321 阅读 · 0 评论 -
bzoj 3172: [Tjoi2013]单词 后缀数组+rmq+二分
题意某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。每个单词由小写字母组成,N<=200,文章长度不超过10^6分析AC自动机模板,但由于很久没打sa了想要复习一下,于是就用了sa+rmq+二分的方法来做。代码#include<iostream>#include<cstdio>#include<cstdlib>#includ原创 2017-02-20 19:37:07 · 381 阅读 · 0 评论 -
bzoj 4516: [Sdoi2016]生成魔咒 后缀数组
题意给你一个字符串,问该字符串的每一个前缀中分别有多少个不同的子串。 n<=100000分析一种很暴力的方法就是构建SAM,然后在更新fa的时候暴力维护答案。我用的是sa来做。我们考虑将字符串反过来,构建sa,那么一个原串的一个前缀就变成了当前的一个后缀。 设当前处理到i,1到i-1已经处理完毕,且答案为ans,那么我们只要统计原串中以i结尾的后缀与以j(1<=j<=i-1)结尾的后缀的最长公共原创 2017-03-23 20:34:34 · 640 阅读 · 0 评论 -
bzoj 4199: [Noi2015]品酒大会 后缀数组+并查集
题意给出一个 长度为 n 的字符串,每一位有一个权值 val。定义两个位字符为 r 相似,是指分别从这两个字符开始,到后面的 r 个字符都相等。两个 r 相似的字符还有一个权值为这两个字符权值的乘积。问对于 r = 0, 1, 2, … , n - 1,统计出有多少种方法可以选出 2 个“r 相似”的字符,并回答选择 2 个”r 相似”的字符可以得到的权值的最大值。 n<=3*10^5,val原创 2017-04-11 15:23:01 · 433 阅读 · 0 评论 -
bzoj 4556: [Tjoi2016&Heoi2016]字符串 后缀数组+可持久化线段树
题意给出一个长度为n的字符串,有m个询问a b c d表示求s[a..b]的子串和s[c..d]的最长公共前缀的最大值。 n,m<=100000分析先求一波后缀数组,然后考虑二分答案,将其转变成判定性问题。 设当前长度为len,那么我们可以在height数组内找到一个区间[L,R],使得该区间内的任何下标与s[c..d]的最长公共前缀不小于len。 然后我们可以对rank数组建一棵可持久化线段原创 2017-04-05 21:40:15 · 398 阅读 · 0 评论 -
bzoj 4278: [ONTAK2015]Tasowanie&bzoj 1692: [Usaco2007 Dec]队列变换 后缀数组+贪心
题意给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。1<=n,m<=200000,1<=A[i],B[i]<=1000分析先把两个串放一起求sa,然后用两个指针维护两个串分别归并到哪一位,每次选字典序较大的即可。 证明看这里代码bzoj 4278#include<iostream>#include<cstdio>#include<cstdlib>#i原创 2017-05-28 11:30:13 · 327 阅读 · 0 评论 -
LibreOJ #3049. 「十二省联考 2019」字符串问题 后缀数组+线段树
题意给一个长度为nnn的串SSS和SSS的nanana个子串AiA_iAi和nbnbnb个子串BiB_iBi,有mmm个支配关系(x,y)(x,y)(x,y)表示子串AxA_xAx支配子串ByB_yBy。要求找一个最长的串TTT,使得TTT可以划分成若干个AiA_iAi拼接而成的形式,设划分为t1,...,tkt_1,...,t_kt1,...,tk,且对于任意1≤i≤k−11\l...原创 2019-06-21 10:51:20 · 208 阅读 · 0 评论