随笔分类 -  -----字符串处理 3.AC自动机

摘要:题目链接:hdu 4511 小明系列故事——女友的考验 题意: 中文不解释。 题解: 考虑将那些限制的条件插进AC自动机里面,然后在AC自动机上dp一下最短路就行了。 考虑dp[i][j]表示当前在第i个点上,在AC自动机的第j个点上的最短路。 然后dp转移看代码。 1 #include<bits/ 阅读全文
posted @ 2017-10-16 19:16 bin_gege 阅读(159) 评论(0) 推荐(0)
摘要:题目链接:hdu 5129 Yong Zheng's Death 题意: 给你n个串,每个串串长30,现在让你构造串,使得该串能分成uv,u和v都是给出串中的前缀。 问能构造出多少这样的串。 题解: 这题主要是在如何去重。 如果不考虑重复,显然就是不同前缀串的数量的平方。 但是这里有算重,这里要求, 阅读全文
posted @ 2017-10-15 20:40 bin_gege 阅读(338) 评论(0) 推荐(0)
摘要:题目链接:hdu 6096 String 题意: 给你n个字符串,和q个询问,每个询问给出一个前缀和后缀,问你在这n个字符串中有多少个包含给出的询问,前缀和后缀不能重叠。 题解: 比赛的时候用的hash,无限wa,然后下来后发现他有一组特别的数据专卡我的hash,随便怎么换种子都能卡。真是R了狗了。 阅读全文
posted @ 2017-08-11 14:12 bin_gege 阅读(318) 评论(0) 推荐(0)
摘要:题目链接:hdu 6086 Rikka with String 题意: 给你n个只含01的串,和一个长度L,现在让你构造出满足s[i]≠s[|s|−i+1] for all i∈[1,|s|] ,长度为2L,并且包含给出的n个串,问能有多少种这样的串。 题解: 建立两个AC自动机,一个用来放正串,一 阅读全文
posted @ 2017-08-09 15:20 bin_gege 阅读(216) 评论(0) 推荐(0)
摘要:题目链接:hdu 5995 Guessing the Dice Roll 题意: 有一个6面的骰子,有n(n≤10)个人每个人猜了一个长度为l(l≤10)的序列,不停的掷骰子直到满足一个人的序列则那个人获胜,求每个人获胜的概率。 题解: 将他们猜的串插入AC自动机,然后转移k次,这里k要足够大才能收 阅读全文
posted @ 2017-07-29 15:15 bin_gege 阅读(168) 评论(0) 推荐(0)
摘要:题目链接:hdu 4758 Walk Through Squares 题意: 给你一个n*m的网格,现在你要从(1,1)走到(n,m),每次只能向右走或者向下走,走完后会形成一个包含R,D的序列,这个序列必须要包含题目给出的两个字符串,问有多少种方案。 题解: 由于要从(1,1)走到(n,m),所以 阅读全文
posted @ 2017-07-29 12:35 bin_gege 阅读(660) 评论(0) 推荐(1)
摘要:题目链接:UVALive - 4811 Growing Strings 题意: 给你n个字符串,问你最多能选出多少个字符串,使得s[i]是s[i+1]的子串。 题解: 先将所有的字符串插入AC自动机,将所有字符串按长度排序后,显然dp[i]=max{dp[j]}+1,其中s[j]是s[i]的子串。然 阅读全文
posted @ 2017-07-29 10:22 bin_gege 阅读(117) 评论(0) 推荐(0)
摘要:题目链接:hdu 4057 Rescue the Rabbit 题意: 给出一些模式串,每个串有一定的价值,现在构造一个长度为M的串,问最大的价值为多少,每个模式串最多统计一次。 题解: 由于每个模式串最多统计一次,所以我们要考虑记录是否已经存在该串。 考虑dp[i][j][k]表示当前考虑到i的长 阅读全文
posted @ 2017-07-28 21:09 bin_gege 阅读(162) 评论(0) 推荐(0)
摘要:题目链接:hdu_5507_GT and strings 题意:给n个字符串和q个询问,每个询问给两个数字x,y,问1.x是否为y的子序列,2.x是否为y的子串,是输出1,否则输出0,每个询问输出2个数字 题解: 对于子序列,朴素的做法,每次询问的复杂度为max(str[x],str[y]),题目好 阅读全文
posted @ 2016-09-16 16:29 bin_gege 阅读(176) 评论(0) 推荐(0)
摘要:题目链接:hdu_4787_GRE Words Revenge 题意: 总共有n个操作,2种操作。每行读入一个字符串。 1.如果字符串以+开头,此为单词(即模式串,不考虑重复) 2.如果字符串以?开头,此为文章(即文本串,查询在此之前的单词在文本串中出现的次数) 题解: 强制在线的AC自动机 贴个大 阅读全文
posted @ 2016-09-02 04:25 bin_gege 阅读(179) 评论(0) 推荐(0)
摘要:题目链接:hdu_3247_Resource Archiver 题意: 有n个资源串,m个病毒串,现在要将所有的资源串整合到一个串内,并且这个串不能包括病毒串,问最短的串长为多少 题解: 将资源串和病毒串都插入到AC自动机中,分别做好标记,然后用bfs求出0节点和所有资源串互相的最短距离,最后就是一 阅读全文
posted @ 2016-08-31 21:55 bin_gege 阅读(165) 评论(0) 推荐(0)
摘要:题目链接:hdu_3341_Lost's revenge 题意: 有n个模式串,一个标准串,现在让标准串重组,使得包含最多的模式串,可重叠,问重组后最多包含多少模式串 题解: 显然是AC自动机上的状态压缩DP,不过如果直接开404*500的数组显示开不下,所以这样要将状态hash一下,然后再DP,因 阅读全文
posted @ 2016-08-31 16:11 bin_gege 阅读(152) 评论(0) 推荐(0)
摘要:题目链接:hdu_2296_Ring 题意: 有m个字符串,每个字符串有一个价值,现在让你组成一个不超过n长度的字符串,使得价值最大 题解: 很明显是在AC自动机上的DP,设dp[i][j]表示当前长度为i,AC自动机上匹配到j这个节点的最大价值,这里要求字典序最小,处理的稍微复杂一点,具体看代码 阅读全文
posted @ 2016-08-30 21:24 bin_gege 阅读(151) 评论(0) 推荐(0)
摘要:题目链接:hdu_2825_Wireless Password 题意: 给你m个串,问长度为n至少含k个串的字符串有多少个 题解: 设dp[i][j][k]表示考虑到长度为i,第j个自动机的节点,含有k这个压缩状态的方案数,然后DP下去就行了 1 #include<bits/stdc++.h> 2 阅读全文
posted @ 2016-08-29 16:44 bin_gege 阅读(187) 评论(0) 推荐(0)
摘要:题目链接:hdu_2243_考研路茫茫——单词情结 题意: 让你求包含这些模式串并且长度不小于L的单词种类 题解: 这题是poj2788的升级版,没做过的强烈建议先做那题。 我们用poj2778的方法可以求出不包含这些单词的,然后算出全部种类数,相减就是答案 全部种类数的公式为f[n]=1 + 26 阅读全文
posted @ 2016-07-27 15:47 bin_gege 阅读(196) 评论(0) 推荐(0)
摘要:题目链接:poj_2778_DNA Sequence 题意: 有m个模式串,然后给你一个长度n,问你n长度的DNA序列有多少种不包含这m个模式串 题解: 这题显然要用AC自动机,将模式串的AC自动机建好后,再构建矩阵,矩阵的含义是自动机中0~tot的节点走一步到0~tot的节点的方案数,然后要走n步 阅读全文
posted @ 2016-07-27 13:16 bin_gege 阅读(134) 评论(0) 推荐(0)
摘要:题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 1 #include<cstdio> 2 #include<cstring> 3 #define F(i,a,b) for(int i=a;i<=b;i++) 4 5 const int AC_N=10001*50, 阅读全文
posted @ 2016-07-17 18:18 bin_gege 阅读(157) 评论(0) 推荐(0)
摘要:题目连接:hdu_2457_DNA repair 题意: 给你N个字符串,最后再给你一个要匹配的串,问你最少修改多少次,使得这个串不出现之前给的N的字符串 题解: 刚学AC自动机,切这题还真不知道怎么来DP,然后看了一下题解,需要在失败指针那里做文章,这里我们要将trie的每一个节点当作一个状态,然 阅读全文
posted @ 2016-07-15 14:45 bin_gege 阅读(155) 评论(0) 推荐(0)