随笔分类 - -----字符串处理 6.后缀自动机
摘要:题目链接:hdu 5853 Jong Hyok and String 题意: 给你n个字符串,m个询问,每次询问一个字符串 定义set(s)={(i,j)} 表示 s在第i个字符串中出现,且末尾位置为j。 对于一个询问,求set(Qi)=set(t) ,t串的数量。 题解: 如果是n=1,那么就是后
阅读全文
摘要:题目链接:hdu 4436 str2int 题意: 给你n个字符串,每个字符串都是由数字构成,现在让你将这n个字符串所有的不重复子串构成的十进制数字加起来mod2012. 题解: 似乎这种不重复的子串问题,用后缀自动机都比较无脑搞。 首先将所有的串连起来,中间插个特殊字符,然后建立后缀自动机。 然后
阅读全文
摘要:题目链接:hdu 5343 MZL's Circle Zhou 题意: 给你两个串A,B,问从A,B中选子串x,y,问x+y可以组成多少个不同的串,x和y可以为空。 题解: 贴一个官方的题解 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,
阅读全文
摘要:题目链接:Codeforces Round #244 (Div. 2) D. Match & Catch 题意: 给你两个串A,B,问你是否存在一个串x,使得x是A,B的子串,并且只在A,B中出现一次。 题解: 对于两个串分别建立后缀自动机,更新一下right集,然后dfs一下,更新一下答案就行了。
阅读全文
摘要:题目链接:hdu 4641 K-string 题意: 一开始给你一个字符串S,现在有m个操作。 1 x表示在当前字符串末端添加一个字符x。 2 表示查询当前出现次数超过k次的子串有多少个。 题解: 后缀自动机在线维护right集。 没插入一个字符,就沿着fail跳,如果当前节点大于等于k的就不用再跳
阅读全文
摘要:题目链接:hdu 4416 Good Article Good sentence 题意: 给你一个串A和n个串B,问你A有多少个子串不是这n个B的子串。 题解: 将A串建立后缀自动机,对于每个B串都拿去匹配一下,并记录后缀自动机中每个节点的最大匹配长度。 然后拓扑排序,更新每个节点的fail节点。最
阅读全文
摘要:题目链接:bzoj 3998: [TJOI2015]弦论 题意: 对于一个给定长度为N的字符串,求它的第K小子串是什么。 题解: 后缀自动机O(n)*26解决。 对于op=0,num[i]=1,对于op=1,num[i]=cnt[i]。 因为cnt[i](即right集)表示以i节点结尾的后缀出现的
阅读全文
摘要:题目链接:hdu 4622 Reincarnation 题意: 给你一个串,然后有q个询问,每次询问区间有多少个不同的子串。 题解: 后缀自动机n^2预处理,O(1)回答。 对于每插入一个字符,该字符串新增加的不同的子串的个数为ml[p]-ml[pre[p]]。ml为最大步长 1 #include<
阅读全文