
字符串—后缀自动机
文章平均质量分 80
My_ACM_Dream
生活没有彩排每天都是现场直播
展开
-
codeforce 271D Good Substrings (后缀自动机+dp)
题意:给出一个串,和一个01串,01串只有26个字符,每个字符对应26个英文字母表示这个字符是否是好的,1表示好的,0表示不好的。所给的串中多少个不同子串至多包含k个坏字母。题解:这题没想到用dp来做,一直去想性质,其实用dp做挺简单的。dp[i][j]表示在后缀动机上的i点,现在有j个坏字母对应子串的个数。明显:dp[i][k]+=dp[next[i][j]][k] if(alp原创 2015-03-15 17:13:13 · 825 阅读 · 0 评论 -
hdu 4436 str2int (后缀自动机+dp)
题意:给出n个串然后,求着n个串所有子串对应的数字的和是多少。题解:根据陈立杰的论文我们得出这样的性质,从s开始遍历自动机,走到任意一个u,那么走过的字符构成的串肯定是整个串的子串,简单来说就是从起点到某个点构成了一个子串。那么我们就可以根据这性质计算。其实我们将串对应的数组分成不同位数进行计算,类似于数位dp的思想。dp[u]表示到节点u时构成的数位对应的数字和,那么u的下个节点v有原创 2015-03-11 19:43:43 · 746 阅读 · 0 评论 -
uva 719 Glass Beads (后缀自动机)
题意:给出一个串,如bcdaf长度n=5,可以将串头尾相连,在这个循环串中求字典序最小且长度为n的串的开头点位置。题解:后缀自动机中遍历dfs找到第n个点对应的肯定是长度为n字典序最小的子串,并且结尾点就是遍历的结尾点。#include#include#include#include#include#include#include#include#inclu原创 2015-03-10 20:40:44 · 913 阅读 · 0 评论 -
spoj 7258 Lexicographical Substring Search (后缀自动机+dp)
题意:给出一个串,q个询问,每个询问求第k大字典序的子串。题解:高了好久,终于对后缀自动机略有了解了。这题我们根据自动机中len的大小排序,为的是统计各个子串出现次数做准备,为什么要统计次数呢?自动机存的一个字典图,如果能得到通过某个点能达到其他点的路径数,就可以根据路径数来得到字典序的信息,具体做法是: 1、首先我们定义dp[node]表示经过node这个节点能达到其他节点的路径数。原创 2015-03-10 13:56:14 · 589 阅读 · 0 评论 -
spoj 8222 Substrings (后缀自动机+dp)
题意:给出一个串,定义这样的F(x){ 表示在长度为x的串中出现次数最多的串的长度 },求出F(i) 1题解:刚接触后缀自动机不会很懂,多亏大牛 在做这题前最好看下陈立杰的写的关于后缀数组的论文。论文中提到right(s),表示从s状态出发能到达的所有串的最后一个点的一个集合。len[i]表示在建后缀机的过程中某个过程对应的后缀长度,注意最后不一定会是整个串的后缀,但是可以将len[原创 2015-03-09 23:26:30 · 686 阅读 · 0 评论 -
hdu 4622 Reincarnation (后缀自动机)
题意:给出一个串,q个询问,每个询问要求这个区间[l,r]不同子串的数目。题解:这题有两种做法,一种是后缀数组,一种是自动机,两种方法的思想是一致。用自动机做之前要知道一个性质:每次加入某个字符,会到len[last]-len[fa[last]]个未出现过的子串,并且都是以last为结尾的。那么就好办了,我们并不好在在线获得答案,我们先将询问存下来,然后通过排序按照区间左端点为第一原创 2015-03-10 15:51:59 · 607 阅读 · 0 评论 -
spoj 1811 Longest Common Substring (第一道后缀自动机)
题意:给出连个串求两个串的最长公共子串。题解:dp肯定过不了复杂度高。后缀数组可以过。我用后缀自动机做,第一次写后缀自动机,举得和ac自动机相似都是一种状态转移图。参考了大牛的模板自己改了下写出自己的模板。这题将第一个串加入后缀自动机,然后去匹配第二个串。很裸的题目。#include#include#include#include#include#include#i原创 2015-03-09 20:51:02 · 512 阅读 · 0 评论 -
BZOJ 2806 Cheat (后缀自动机+dp)
题意:给出m个串组成的文章,在给出n个串,求n个串每个串的一个最优划分,划分:将串分成多分子串,L0表示其中能在文章中找到的子串的长度和,maxl表示其中子串的最大长度,在保证L0>=90%总长度前提下使得maxl最大,求出这个最大的maxl。题解:我们分析下这样的题,很明显要满足两种条件不易,那么我们可以枚举maxl,然后判断是否符合条件,对于如何判断我们可以用dp处理,dp[i]表原创 2015-03-14 12:04:47 · 699 阅读 · 0 评论