
字符串
文章平均质量分 66
QuantAsk
蒟蒻OIer
展开
-
hdu7462-字符串【SAM,二分】
的边,那么说明往下走了之后出现次数肯定会比当前串少,所以就没有往下走的必要了。我们可以先处理出每个节点在原串的出现次数,然后把所有这样的链拉出来,询问时直接二分我们能够往后走到哪个位置,顺便使用前缀和记录一下。,我们先在SAM上找到对应节点(经典方法建立SAM时记录每个后缀所在节点,然后从这个节点在parent树往上倍增跳到。多了,就没有继续的必要了,所以我们二分时还需要维护一下中间是否需要往上跳。的情况,也就是对应节点需要往上跳,但是我们考虑如果记。的方向走一步,暴力跳肯定是不对的,我们分析一下性质。原创 2024-08-13 10:26:25 · 1006 阅读 · 1 评论 -
CF1286E-Fedya the Potter Strikes Back【KMP,RMQ】
我们在每次加入字符后考虑所有后缀的贡献,然后考虑加入一个字符后后缀产生贡献的变化。也就是一次操作最多增加一个会产生后缀的贡献,我们取考虑怎么维护其他以前的后缀。现在第二个问题是我们怎么知道每次要删除的后缀是哪些。除了这些以外还有如果。的都修改掉即可,这样势能分析一下就知道是对的。,然后我们就可以一直往上走找到要删除的后缀了。序列加入一个数字,然后求这个串的贡献。的后缀有多少个,然后每次暴力把大于。树,那么原本产生贡献的后缀肯定都在。点到根节点的路径上,我们维护一个。维护一下后缀的贡献即可。...原创 2022-08-10 20:37:34 · 329 阅读 · 0 评论 -
P6698-[BalticOI 2020 Day2]病毒【AC自动机,dp,SPFA】
题目链接:https://www.luogu.com.cn/problem/P6698有一个包含0∼G−10\sim G-10∼G−1的字符集,其中有nnn种变换,能够将一个字符ai(ai>1)a_i(a_i>1)ai(ai>1)变为一串字符bib_ibi,当一个字符串中只剩下000和111时变换就结束了。然后给出mmm个匹配串cic_ici。现在对于每个字符i∈[2,G−1]i\in[2,G-1]i∈[2,G−1],是否字符iii无论变化结束时都含有至少一个匹配串,如果不是,求一个最短的不包含任何原创 2022-06-23 09:22:26 · 267 阅读 · 0 评论 -
CF1276F-Asterisk Substrings【SAM,线段树合并】
题目链接:https://www.luogu.com.cn/problem/CF1276F给出一个长度为nnn的字符串SSS,现在依次进行如下操作求最后有多少种不同的TTT。发现最终其实只有4种情况,T,T∗,∗T,T1∗T2T,T*,*T,T_1*T_2T,T∗,∗T,T1∗T2。前面三种很好记录,主要考虑最后一种。对于T1T_1T1来说,同一个endposendposendpos等价类中的子串对应的T2T_2T2数量应该也是相同的。那我们肯定是先建一个SAMSAMSAM这样就可以知道每个endp原创 2022-06-14 10:00:23 · 207 阅读 · 0 评论 -
CF1063F-String Journey【SAM,线段树】
正题题目链接:https://www.luogu.com.cn/problem/CF1063F题目大意给出一个字符串,求选出kkk个不交子串满足按照起始位置排序后,满足下一个是上一个的真子串。求kkk的最大值。1≤n≤5×1051\leq n\leq 5\times 10^51≤n≤5×105解题思路首先我们肯定是从短串考虑到长串的,为了方便我们先把字符串翻转一下。然后考虑一个性质,肯定存在一个最优解的字符串集合是长度每次增加111的,显然因为如果增加超过111,我们统一删掉这个位置往后原创 2022-02-20 18:11:54 · 361 阅读 · 0 评论 -
YbtOJ-相似子串【SA,RMQ,二分】
正题题目大意给出一个长度为nnn的字符串,两个串相似当且仅当可以通过每种字符置换使得它们相同。qqq次询问这个字符串所有子串中和这个串中sl,rs_{l,r}sl,r子串有多少个相似的。1≤n≤105,1≤q≤5×1051\leq n\leq 10^5,1\leq q\leq 5\times 10^51≤n≤105,1≤q≤5×105字符集是数字0∼90\sim 90∼9解题思路请问我是在阴间吗首先对于相似的比较相信很常见,维护每个数字上一个和它相同的数字的距离,然后没有上一个就定为原创 2022-02-05 21:10:55 · 521 阅读 · 0 评论 -
2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】
正题题目链接:https://ac.nowcoder.com/acm/contest/20110/D题目大意求一个长度为nnn的字符串的所有子串的borderborderborder长度和。1≤n≤1051\leq n\leq 10^51≤n≤105解题思路考虑到两个相同的子串会作为一个子串的borderborderborder,所以问题可以变为求所有相同子串对的长度之和。然后直接跑出SAMSAMSAM然后对于每个节点统计它在字符串里的出现次数,然后所有的lenfa+1∼lenxlen_{原创 2021-10-14 07:24:25 · 224 阅读 · 0 评论 -
P7046-「MCOI-03」诗韵【SAM,倍增,树状数组】
正题题目链接:https://www.luogu.com.cn/problem/P7046题目大意给出一个长度为 nnn 的字符串,然后 mmm 次把它的一个子串加入集合。如果一个字符串在这个集合中作为字符串的后缀出现次数大于 kkk 那么这个字符串就会被计入贡献。每次求计入贡献的字符串数和最长长度。1≤n,m≤5×105,0≤k<n1\leq n,m\leq 5\times 10^5,0\leq k<n1≤n,m≤5×105,0≤k<n。解题思路考虑在parents树上原创 2021-09-22 19:13:58 · 203 阅读 · 0 评论 -
P4548-[CTSC2006]歌唱王国【概率生成函数,KMP】
正题题目链接:https://www.luogu.com.cn/problem/P4548题目大意ttt次询问,给出一个长度为mmm的串SSS和一个空串TTT,每次在TTT后面随机加入1∼n1\sim n1∼n的字符,直到TTT中出现SSS为止,求期望次数。1≤n≤105,t≤50,1≤m≤1051\leq n\leq 10^5,t\leq 50,1\leq m\leq 10^51≤n≤105,t≤50,1≤m≤105解题思路对于一个随机的数字XXX,它的概率生成函数是一个形如F(x)=∑原创 2021-09-16 19:41:33 · 179 阅读 · 0 评论 -
CF25E-Test【AC自动机,bfs】
正题题目链接:https://www.luogu.com.cn/problem/CF25E题目大意给出三个串,然后求一个最短的串包含这三个串。1≤∣s1∣,∣s2∣,∣s3∣≤1051\leq |s_1|,|s_2|,|s_3|\leq 10^51≤∣s1∣,∣s2∣,∣s3∣≤105解题思路把三个串状压,先跑出ACACAC自动机和每个节点包含的串的状态。然后设fi,sf_{i,s}fi,s表示目前到节点iii,已经包含串的状态是sss,然后bfsbfsbfs转移即可。时间复杂度原创 2021-08-24 11:31:11 · 224 阅读 · 0 评论 -
CF666E-Forensic Examination【广义SAM,线段树合并】
正题题目链接:https://www.luogu.com.cn/problem/CF666E解题思路给出一个串SSS和nnn个串TiT_iTi。mmm次询问Sa∼bS_{a\sim b}Sa∼b在Tl∼rT_{l\sim r}Tl∼r中出现的最多次数并且输出这个串的编号。1≤∣s∣≤5×105,∑Ti≤5×104,1≤m≤5×1051\leq |s|\leq 5\times 10^5,\sum T_i\leq 5\times 10^4,1\leq m\leq 5\times 10^51≤∣s原创 2021-08-23 10:30:48 · 166 阅读 · 0 评论 -
P3426-[POI2005]SZA-Template【KMP】
正题题目链接:https://www.luogu.com.cn/problem/P3426题目大意给出一个长度为nnn的字符串sss,求一个长度最小的字符串ttt使得sss所有ttt和ttt匹配的位置能覆盖串sss。1≤n≤5×1051\leq n\leq 5\times 10^51≤n≤5×105解题思路首先答案肯定是原串的一个borderborderborder,设fif_ifi表示前缀s1∼is_{1\sim i}s1∼i的答案。考虑如何转移,首先fif_ifi至多是iii,然原创 2021-08-20 10:35:35 · 251 阅读 · 0 评论 -
P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】
正题题目链接:https://www.luogu.com.cn/problem/P4022题目大意给出mmm个模板串。然后nnn次询问给出一个串SSS要求找到一个最大的LLL使得能够将SSS超过90%90\%90%的部分拿出来分后每个串都是某个模板串的子串且长度不小于LLL。所有输入文件长度不超过 110000011000001100000 字节。字符集为{0,1}\{0,1\}{0,1}解题思路先把模板串拿出来构一个广义SAM,然后考虑用这个对串进行匹配。先对于每个位置求出一个leni原创 2021-08-12 19:30:44 · 177 阅读 · 0 评论 -
CF587F-Duff is Mad【AC自动机,根号分治】
正题题目链接:https://www.luogu.com.cn/problem/CF587F题目大意给出nnn个字符串sss。qqq次询问给出l,r,kl,r,kl,r,k要求输出sl..rs_{l..r}sl..r在sks_ksk中出现了多少次。1≤n,q,∑∣si∣≤1051\leq n,q,\sum |s_i|\leq 10^51≤n,q,∑∣si∣≤105解题思路考虑一个比较暴力的做法,先把所有的构出一棵ACACAC自动机,一个串SSS有后缀TTT当且仅当在failfailfa原创 2021-07-19 07:51:06 · 189 阅读 · 0 评论 -
P5404-[CTS2019]重复【KMP,dp】
正题题目链接:https://www.luogu.com.cn/problem/P5404题目大意给出一个字符串SSS,然后求有多少个长度为mmm的串TTT满足。无限多个串TTT拼接起来后能找出一个长度和SSS相等的子串字典序比SSS小。1≤∣S∣,m≤20001\leq |S|,m\leq 20001≤∣S∣,m≤2000解题思路首先有一个小于的很难找,所以我们找有多少一直大于等于的减去就好了。然后其实如果有一个大于位置大于SSS串匹配就可以直接不管,所以其实我们主要考虑前面都相等的情况原创 2021-07-06 18:26:29 · 194 阅读 · 0 评论 -
P5287-[HNOI2019]JOJO【KMP】
正题题目链接:https://www.luogu.com.cn/problem/P5287题目大意开始一个空串,nnn个操作在末尾加入xxx个ccc字符(保证和ccc和前面的字符不同)返回到第xxx次操作之后每次操作完成后求所有前缀的最长的borderborderborder长度和1≤n≤1051\leq n\leq 10^51≤n≤105解题思路二操作好像是一个离线树能搞出来的先只考虑一操作,因为是相当于求kmpkmpkmp之后的nextnextnext和,所以可以考虑一下用km原创 2021-06-21 12:08:31 · 207 阅读 · 0 评论 -
P4199-万径人踪灭【FFT】
正题题目链接:https://www.luogu.com.cn/problem/P4199题目大意给出一个只包含a,ba,ba,b的字符串求有多少个不连续的回文子序列(字母回文,位置对称)1≤n≤1051\leq n\leq 10^51≤n≤105解题思路这个不连续一看就很nt,考虑求出所有的再减去连续的对于每个对称轴来说,a,ba,ba,b分开考虑贡献再乘起来再减去一(两个都为空)。加入计算aaa的贡献,就是看有多少对aaa以它为对称轴,设为kkk对,那么方案就是2k2^k2k。怎原创 2021-03-31 09:55:30 · 173 阅读 · 0 评论 -
NOI.AC#2144-子串【SAM,倍增】
正题题目链接:http://noi.ac/problem/2144题目大意给出一个字符串sss和一个序列aaa。将字符串sss的所有本质不同子串降序排序后,求有多少个区间[l,r][l,r][l,r]使得子串sl,rs_{l,r}sl,r排名等于al∼ra_{l\sim r}al∼r的和。1≤n≤2×1051\leq n\leq 2\times 10^51≤n≤2×105解题思路因为是降序排序,所以每加一个字符排名是在下降的,而aia_iai的和又是不降的,所以对于每个左端点最多只有一原创 2021-03-30 11:53:13 · 166 阅读 · 0 评论 -
CF932G-Palindrome Partition【PAM】
正题题目链接:https://www.luogu.com.cn/problem/CF932G题目大意给出一个长度为nnn的字符串,将其分为kkk段(kkk为任意偶数),记为ppp。要求满足对于任意iii都有pi=pk−i+1p_i=p_{k-i+1}pi=pk−i+1。求方案数。1≤n≤1061\leq n\leq 10^61≤n≤106解题思路考虑将字符串化为S1SnS2Sn−1S3Sn−2...S_1S_nS_2S_{n-1}S_3S_{n-2}...S1SnS2Sn−1S3原创 2021-03-01 16:57:41 · 196 阅读 · 0 评论 -
P4770-[NOI2018]你的名字【SAM,线段树合并】
正题题目链接:https://www.luogu.com.cn/problem/P4770题目大意给出一个长度为nnn的字符串SSS。qqq次询问给出一个串TTT和一个区间[L,R][L,R][L,R],求TTT有多少个本质不同的子串不是SL∼RS_{L\sim R}SL∼R的子串。1≤n≤5×105,1≤Q≤105,∑∣T∣≤1061\leq n\leq 5\times 10^5,1\leq Q\le 10^5,\sum|T|\leq 10^61≤n≤5×105,1≤Q≤105,∑∣T∣≤10原创 2021-02-27 10:13:08 · 228 阅读 · 2 评论 -
51nod1600-Simple KMP【SAM,树链剖分】
正题题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1600题目大意给出一个字符串sss,每次在最后插入一个字符后求它的所有分别子串构出的failfailfail树的深度和。1≤Q≤1051\leq Q\leq 10^51≤Q≤105解题思路考虑两个相等的子串长度为lenlenlen,那么以后面那个子串末尾结尾的failfailfail有lenlenlen种左端点的情况是指向前面那个子串的。新插入后所有串的后缀都是新的子原创 2021-02-20 14:57:13 · 253 阅读 · 0 评论 -
YbtOJ#532-往事之树【广义SAM,线段树合并】
正题题目链接:https://www.ybtoj.com.cn/problem/532题目大意给出nnn个点的一个TrieTrieTrie树,定义SxS_xSx表示节点xxx代表的字符串求max{∣LCP(Sx,Sy)∣+∣LCS(Sx,Sy)∣}(x≠y)max\{|LCP(S_x,S_y)|+|LCS(S_x,S_y)|\}(x\neq y)max{∣LCP(Sx,Sy)∣+∣LCS(Sx,Sy)∣}(x=y)(LCP/LCSLCP/LCSLCP/LCS分别表示最长公共前/后缀原创 2021-02-18 17:16:38 · 213 阅读 · 0 评论 -
YbtOJ#526-折纸游戏【二分,hash】
正题题目链接:https://www.ybtoj.com.cn/problem/526题目大意一个n×mn\times mn×m的网格上有字母,你每次可以沿平行坐标轴对折网格,要求对折的对应位置字母相同。询问有多少个可能对折出来的子矩阵。1≤n×m≤1061\leq n\times m\leq 10^61≤n×m≤106解题思路首先行和列是独立的,行的对折不会和列的对折有任何关联,所以可以分开考虑行和列可以对折出的区间。然后设每一行分开对每个轴求出一个最大对折距离(这个用二分+hashh原创 2021-02-17 16:36:45 · 215 阅读 · 0 评论 -
P5319-[BJOI2019]奥术神杖【0/1分数规划,AC自动机,dp】
正题题目链接:https://www.luogu.com.cn/problem/P5319题目大意一个长度为nnn的串TTT,用0∼90\sim 90∼9填充所有的...。然后给出mmm个串和它们的价值。一个填充方案的价值等于:若TTT中出现了ccc个给出的串,那价值等于它们的价值乘积开ccc次根。1≤m≤1501,1≤Vi≤1091\leq m\leq 1501,1\leq V_i\leq 10^91≤m≤1501,1≤Vi≤109解题思路ans=∏Vicans=\sqrt[c]{\原创 2021-02-15 22:02:23 · 197 阅读 · 0 评论 -
P6793-[SNOI2020]字符串【广义SAM,贪心】
正题题目链接:https://www.luogu.com.cn/problem/P6793题目大意给出两个长度为nnn的字符串,取出他们所有长度为kkk的连续子串分别构成两个可重集合A,BA,BA,B。你每次可以花费xxx点代价修改AAA中一个字符串长度为xxx的后缀,求至少花费多少代价能够使得两个集合完全相同。1≤k≤n≤1.5×1051\leq k\leq n\leq 1.5\times 10^51≤k≤n≤1.5×105解题思路两个串S,TS,TS,T的匹配代价是max{k−LCP(原创 2021-02-15 19:33:30 · 202 阅读 · 0 评论 -
CF710F-String Set Queries【AC自动机,二进制分组】
正题题目链接:https://www.luogu.com.cn/problem/CF710F题目大意TTT次操作往集合中加入一个字符串往集合中删除一个字符串给出一个模式串求出现的集合里面的字符串个数解题思路删除的话改成加入一个权值为−1-1−1的字符串就是全都是加入操作了。然后就可以像[SDOI2014]向量集一样的做法了,维护一个线段树,然后第iii次加入修改第iii个节点,然后回朔的时候,如果一个区间[l,r][l,r][l,r]加入了r−l+1r-l+1r−l+1个字符串(加原创 2021-01-26 15:32:51 · 216 阅读 · 0 评论 -
P6640-[BJOI2020]封印【SAM,二分】
正题题目链接:https://www.luogu.com.cn/problem/P6640题目大意给出两个字符串s,ts,ts,t。qqq次给出l,rl,rl,r询问sl∼rs_{l\sim r}sl∼r与ttt的最长公共子串。解题思路对于末尾的条件很好做,直接上SAMSAMSAM就好了,设fif_ifi表示一个最大的数满足si−fi+1,is_{i-f_i+1,i}si−fi+1,i是ttt的子串。然后对于一个询问l,rl,rl,r就是相当于求max{ min{fl+i−原创 2021-01-25 14:21:38 · 1263 阅读 · 1 评论 -
P5212-SubString【LCT,SAM】
正题题目链接:https://www.luogu.com.cn/problem/P5212题目大意开始一个字符串SSS,有nnn次操作在SSS末尾加入一个字符串询问一个串在SSS中出现了多少次强制在线解题思路强制在线的话,只有SAM\text{SAM}SAM能够支持动态插字符了,但是我们平时统计答案的时候要先做一次拓扑排序然后上传信息。这里要动态维护parents\text{parents}parents树的话用LCT\text{LCT}LCT就好了,就是链修改加单点查询,然后因为原创 2021-01-14 19:37:39 · 174 阅读 · 0 评论 -
CF700E-Cool Slogans【SAM,线段树合并,dp】
正题题目链接:https://www.luogu.com.cn/problem/CF700E题目大意给出一个字符串SSS,求一个最大的kkk使得存在kkk个字符串其中s1s_1s1是SSS的子串,si+1s_{i+1}si+1在sis_isi中出现了至少222次。解题思路首先我们需要有两个结论si+1s_{i+1}si+1一定是sis_isi的其中一个后缀。因为如果si+1s_{i+1}si+1不是sis_isi的一个后缀,那么sis_isi去掉后面那一部分不会影响匹配数并原创 2021-01-12 14:31:52 · 322 阅读 · 0 评论 -
P3649-[APIO2014]回文串【PAM】
正题题目链接:https://www.luogu.com.cn/problem/P3649题目大意一个字符串,求最大的回文串长度×出现次数解题思路构建出PAM\text{PAM}PAM然后统计一下每个节点作为后缀的次数,failfailfail树上上传一下信息就好了,时间复杂度O(n)O(n)O(n)。当然也可以SAM+Manacher+\text{SAM}+\text{Manacher}+SAM+Manacher+倍增,因为一个字符串里本质不同的回文串就是会让马拉车的maxrightmax原创 2021-01-09 08:57:46 · 384 阅读 · 0 评论 -
CF204E-Little Elephant and Strings【广义SAM,线段树合并】
正题题目链接:https://www.luogu.com.cn/problem/CF204E题目大意nnn个字符串的一个字符串集合,对于每个字符串求有多少个子串是这个字符串集合中至少kkk个字符串的子串。解题思路因为对于每个字符串我们需要维护的信息不同,不能累加,所以考虑使用线段树合并。先将nnn个字符串构建出一个广义SAMSAMSAM,然后对于每个节点维护一个该线段树表示该节点属于的字符串。然后在parentsparentsparents树上从下往上合并,如果属于字符串的数量多余kkk,那原创 2021-01-07 12:58:30 · 249 阅读 · 0 评论 -
CF235C-Cyclical Quest【SAM】
正题题目链接:https://www.luogu.com.cn/problem/CF235C题目大意一个文本串sss。询问nnn个匹配的本质不同的循环同构在文本串中出现了几次。解题思路我们匹配完原串之后,相当与每次在头部删去一个字符然后又在末尾加上一个字符。使用SAMSAMSAM匹配的话,发现每次在parentsparentsparents树上条就相当于删去头部的字符,因为parentsparentsparents树上的祖先是属于同一个endposendposendpos类的,所以后面的字符不原创 2021-01-07 08:52:52 · 240 阅读 · 0 评论 -
P6688-可重集【字符串hash,线段树】
正题题目链接:https://www.luogu.com.cn/problem/P6688解题思路nnn个数,每次有操作修改一个数询问两个区间是否他们中的元素分别组成的可重集合A,BA,BA,B,满足对于每个Ai=Bi+kA_i=B_i+kAi=Bi+k其中kkk是一个相同的数解题思路先不考虑kkk的问题我们字符串hashhashhash的特征值是第iii位为pip^ipi,但是我们这边并不考虑它的顺序,然后可重集合提示我们要构造集合的特征值。那么我们对于一个数xxx它的特征值是原创 2020-12-18 17:35:10 · 1752 阅读 · 1 评论 -
P6257-[ICPC2019 WF]First of Her Name【AC自动机】
正题题目链接:https://www.luogu.com.cn/problem/P6257题目大意给出一个字典树,kkk次询问求每个节点出发到根节点的路径有多少包含前缀sis_isi。解题思路我们按照所有询问串的反串构造ACACAC自动机。那么此时如果我们用一个串SSS上去跑匹配的话,那么跑到的节点就表示该串在所有ACACAC自动机上的串拥有的最长后缀。然后其他存在的后缀一定在这个点到根的failfailfail链上。然后我们丢一个TrieTrieTrie树上去匹配,跑到的点cnt++c原创 2020-12-03 19:22:48 · 336 阅读 · 0 评论 -
P5546-[POI2000]公共串【SAM】
正题题面链接:https://www.luogu.com.cn/problem/P5546题目大意求nnn个串的最长公共子串。解题思路注意到最长公共子串一定是其中所有的子串,所以我们可以先随意对一个串构建SAMSAMSAM然后将信息存在上面即可。然后每一个其他串都丢到那个SAMSAMSAM上跑匹配,每次跑出来的取一个minminmin就好了,注意祖先也要附上值。codecodecode#include<cstdio>#include<cstring>#inc原创 2020-11-26 21:22:38 · 412 阅读 · 0 评论 -
[2020.11.26NOIP模拟赛]勇者的后缀【SA,RMQ,主席树,二分】
正题题目链接:https://www.luogu.com.cn/problem/U142356?contestId=37784题目大意一个字符串,询问给出(x,l,r)(x,l,r)(x,l,r)表示询问在[l,r][l,r][l,r]中作为起点找一个后缀它与xxx作为起点的后缀的LCPLCPLCP最长,且满足最长的情况下字典序最小。解题思路显然是要再xxx后缀数组的位置上找到一个最前的在[l,r][l,r][l,r]中的数使得LCPLCPLCP最长。我们要先在SASASA上找到xxx在[l原创 2020-11-26 16:22:02 · 247 阅读 · 0 评论 -
[2020.11.26NOIP模拟赛]询问【字符串hash】
正题题目链接:https://www.luogu.com.cn/problem/U142342?contestId=37784题目大意一个字符串,定义两个字符串相似为用一些字母代替相同的字母后可以相同。如urbbr=groorurbbr=groorurbbr=groor,apple≠abcdeapple\neq abcdeapple=abcde要求支持询问一个字符串的两个区间是否相似解题思路我们每个位置的hashhashhash值维护这个字母距离上一个与它相同的字母的距离,发现如果一个原创 2020-11-26 16:14:00 · 266 阅读 · 0 评论 -
P3346-[ZJOI2015]诸神眷顾的幻想乡【广义SAM】
正题题目链接:https://www.luogu.com.cn/problem/P3346题目大意一棵树,求树上所有路径构成的字符串有多少种。(叶子不超过303030个)解题思路如果是根节点到一些节点的路径的话很好做,直接建广义SAMSAMSAM即可,但是因为路径会拐弯所以我们考虑如何统计拐弯的路径。不难发现如果选择另一个叶子作为根那么就能让某些拐弯的路径变直,在每个叶子节点处都跑一遍建立广义SAMSAMSAM即可。时间复杂度O(30n)O(30n)O(30n)codecodecode原创 2020-11-26 07:35:37 · 222 阅读 · 0 评论 -
P6139-[模板]广义后缀自动机(广义 SAM)
正题题目链接:https://www.luogu.com.cn/problem/P6139题目大意求nnn个串的不同子串个数解题思路如何在SAMSAMSAM中插入多个字符串。可以我们可以通过更改lastlastlast为之前的节点来做,如果插入一个之前插入过的节点就按照之前SAMSAMSAM的方法特判就好了。codecodecode#include<cstdio>#include<cstring>#include<algorithm>#defi原创 2020-11-26 07:08:32 · 406 阅读 · 0 评论 -
P3181-[HAOI2016]找相同字符【SAM】
正题题目链接:https://www.luogu.com.cn/problem/P3181题目大意两个字符串,求有多少个(l1,r1,l2,r2)(l_1,r_1,l_2,r_2)(l1,r1,l2,r2)使得字符串l1∼r1l_1\sim r_1l1∼r1的子串与l2∼r2l_2\sim r_2l2∼r2的子串相等。解题思路又是公共子串的问题,我们先对第一个串构造出SAMSAMSAM,然后用第二个串在第一个串上跑。·对于每个前缀我们有一个当前节点xxx和一个最长匹配长度lll原创 2020-11-25 20:32:06 · 206 阅读 · 0 评论