随笔分类 -  AC自动机

摘要:http://acm.hust.edu.cn/vjudge/problem/16883 题意:要构造一个长度为n的字符串,然后有m模板串构成一个集合(m<=10),构造出来的字符串至少含有k种模板串。全部为小写。 题解: 没有打。d[s][l][x]表示当前已有的模板串集合s,已构造了长度为l的串, 阅读全文
posted @ 2016-07-19 22:13 拦路雨偏似雪花 阅读(146) 评论(0) 推荐(0)
摘要:http://acm.hust.edu.cn/vjudge/problem/16405 题意:给定一些只含大写字母的病毒串,再给一个文本串,问文本串中每个病毒串各出现了多少次 题解: 就是用AC自动机,在每个节点末尾有个id记录是哪个单词的末尾,然后如果同时是多个单词的末尾就用一个next数组链状记 阅读全文
posted @ 2016-07-19 22:10 拦路雨偏似雪花 阅读(211) 评论(0) 推荐(0)
摘要:http://acm.hust.edu.cn/vjudge/problem/33057 题意:在二维文本串T中查找一个二维模板串P出现了多少次。 题解: 拆分模板串P的每一行,建AC自动机。拆分文本串T的每一行,在自动机中与P匹配,ct[i][j]表示以点(i,j)为左上角、与P等大的矩形有多少个对 阅读全文
posted @ 2016-07-19 22:04 拦路雨偏似雪花 阅读(468) 评论(0) 推荐(0)
摘要:http://acm.hust.edu.cn/vjudge/problem/31655 题意:给定k个模板串,n个字符以及选择它的概率pro[i],要构造一个长度问L的字符串s,问s不包含任意一个模板串的概率。 题解: ed[i]标记trie上的点i是不是任意一个模板串的结尾(在求fail的时候ed 阅读全文
posted @ 2016-07-19 22:01 拦路雨偏似雪花 阅读(227) 评论(0) 推荐(0)
摘要:http://acm.hust.edu.cn/vjudge/problem/19224 题意:给定n个单词,一个字符串,问哪些单词在字符串中出现的次数最多。单词aba,文本ababa,则aba出现了2次。 题解:每找到一个记得要顺着fail找到所有单词。 阅读全文
posted @ 2016-07-19 21:55 拦路雨偏似雪花 阅读(226) 评论(0) 推荐(0)
摘要:http://acm.hust.edu.cn/vjudge/problem/16403 题意:给定n个单词,一个字符串,问字符串中出现了多少个单词。(若单词her,he,字符串aher中出现了两个单词) 题解: 每个单词末尾节点sum=1;find的时候每个点都顺着fail往上跳,加上该节点的sum 阅读全文
posted @ 2016-07-19 21:50 拦路雨偏似雪花 阅读(1535) 评论(1) 推荐(0)
摘要:AC自动机的模板 1 void buildAC() 2 { 3 while(!q.empty()) q.pop(); 4 q.push(0); 5 while(!q.empty()) 6 { 7 int x=q.front();q.pop(); 8 int fail=a[x].fail; 9 for 阅读全文
posted @ 2016-07-19 21:38 拦路雨偏似雪花 阅读(215) 评论(0) 推荐(0)
摘要:题意:给n个病毒DNA序列,再给一个DNA序列,问该序列至少修改多少个碱基能不含任何病毒DNA。病毒DNA序列一共不超过1000,询问的DNA长度不超过1000。 题解:DP:d[l][p]表示询问到第l位、当前在AC自动机上的位置为p时的最少修改数,用d[l][p]推d[l+1][x]。本来打的是 阅读全文
posted @ 2016-07-18 10:55 拦路雨偏似雪花 阅读(313) 评论(0) 推荐(0)
摘要:这题我的代码在hdu上AC,在uva上WA。 题意:按顺序输入n个串以及它的权值di,要求在其中选取一些串,前一个必须是后一个的子串。问d值的和最大是多少。 (1≤n≤2×10^4 ,串的总长度<=3*10^5) 题解: 这题一开始我的方向就错了,想了很久d[x][y]表示在AC自动机上的节点x、下 阅读全文
posted @ 2016-07-18 09:20 拦路雨偏似雪花 阅读(585) 评论(0) 推荐(0)
摘要:题意: (只含AGCT)给定m个病毒串,让你构造一个长度为n的字符串(也只含有AGCT),问有多少种方案。n很大:1<=n<=2000000000 题解: 用病毒串建立AC自动机(num个节点),然后构建一个num*num的矩阵表示节点i走一步到j有多少种方案。注意:根节点也要算。原理:原本是在AC 阅读全文
posted @ 2016-07-14 10:47 拦路雨偏似雪花 阅读(252) 评论(0) 推荐(0)
摘要:题意:给定一些只含大写字母的病毒串,再给一个文本串,问文本串中每个病毒串各出现了多少次。 题解: 就是用AC自动机,在每个节点末尾有个id记录是哪个单词的末尾,然后如果同时是多个单词的末尾就用一个next数组链状记录当前id的下一个值。多组数据坑死人。坑死人。 阅读全文
posted @ 2016-07-14 09:20 拦路雨偏似雪花 阅读(138) 评论(0) 推荐(0)
摘要:题意:给定只含有A、G、C、T的n个模板串,一个文本串,文本串任意两个字母可互换位置,问最多能匹配多少个模板串。注意:匹配同一个模板串匹配了两次,ans+=2;(可重复) 题解: 原本想到一个简单dp : 开一个数组d[t1][t2][t3][t4][x],t1~t4分别表示4个字母各有多少个,x表 阅读全文
posted @ 2016-07-13 15:32 拦路雨偏似雪花 阅读(351) 评论(0) 推荐(0)
摘要:题意:给定n个文本串,m个病毒串,文本串重叠部分可以合并,但合并后不能含有病毒串,问所有文本串合并后最短多长。 (2 <= n <= 10, 1 <= m <= 1000) 题解: 首先可以想出一个简单的位压DP : d[s][i] = min(d[ss][j] - 合并i、j的重叠部分长度) 问题 阅读全文
posted @ 2016-07-13 09:59 拦路雨偏似雪花 阅读(777) 评论(1) 推荐(1)
摘要:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23083 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和'B'、'P'两个字母。经阿狸研 阅读全文
posted @ 2016-07-12 10:51 拦路雨偏似雪花 阅读(384) 评论(0) 推荐(0)