![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AC自动机
Jinx_jinx_again
啊啊啊啊哈哈哈
展开
-
hdu 2222 Keywords Search(AC 自动机)
AC 自动机的入门题。 k原创 2014-06-08 22:43:08 · 610 阅读 · 0 评论 -
Hdu 2243 考研路茫茫——单词情结 (AC自动机+矩阵)
哎哟喂,中文题。。。不说题意了。 首先做过POJ 2778可以知道AC自动机是可以求出长度为L的串中不含病毒串的数量的。 POJ 2778的大概思路就是先用所有给的病毒串建一个AC自动机,然后将AC自动机上所有非单词节点连一个边。 离散数学中有说道,如果矩阵A 中的 [i][j] 表示 i节点通过一条边可以走到j节点的方法数。 那么A*A这个矩阵的[i][j]就表示 i 节点到j原创 2014-10-04 16:35:12 · 1258 阅读 · 1 评论 -
Zoj 3535 Gao the String II (AC自动机+dp)
题目大意: 用集合A中的串构造出一个串,使之让更多的setB中的串成为他的子串。 思路分析: 和 Codeforces 86C 差不多。 不过这里是要用A中的构造。 先用A 和 B的串构造一个自动机。然后对于A集合的尾结点给出一个最大后缀匹配,对于B集合的尾结点给一个权值。 dp[i][j][k] 表示已经构造出来了一个长度为i的串,现在走到了自动机的j结点,i长度后面有k原创 2014-10-03 14:48:03 · 1350 阅读 · 0 评论 -
Zoj 3545 Rescue the Rabbit(ac自动机+dp)
题目大意: 给出的DNA序列有一个权值,请构造一个长度为I的DNA序列使得在这段DNA序列的权值最大。如果为负数就输出噼里啪啦。。。 思路分析: 构造序列就是在ac自动机上走,求最大要用到dp dp[i][j][k] 表示现在构造到了长度 i 。此时的我们把当前字符放在j节点,并且满足了k状态。k是一个10位的2进制状态压缩。 注意这道题上有坑就是一个序列可能有多个权值。所以不能原创 2014-10-02 14:45:31 · 1095 阅读 · 0 评论 -
Hdu 2457 DNA repair (ac自动机+dp)
题目大意: 修改文本串的上的字符,使之不出现上面出现的串。问最少修改多少个。 思路分析: dp[i][j]表示现在 i 个字符改变成了字典树上的 j 节点。 然后顺着自动机一直转移方程。 注意合法与不合法。 #include #include #include #include #define inf 0x3f3f3f3f using namespace std原创 2014-10-01 18:25:14 · 958 阅读 · 0 评论 -
Codeforces 86C Genetic engineering (AC自动机+dp)
题目大意: 要求构造一个串,使得这个串是由所给的串相连接构成,连接可以有重叠的部分。 思路分析: 首先用所给的串建立自动机,每个单词节点记录当前节点能够达到的最长后缀。 开始的时候想的是dp[i][j]表示长度为i,走到自动机的j节点的答案。 但是显然既然是可以重复覆盖的,那么每一个节点的dp值都并不是最优的,因为可以从一个地方截断去连接另外一个串。 所以正确姿势就是dp [i原创 2014-10-02 21:43:19 · 1664 阅读 · 0 评论 -
Hdu 3341 Lost's revenge (ac自动机+dp+hash)
题目大意: 给出很多个DNA串,每一个串的价值为1,最后给出一个长串,要你重新排列最后的串使之它所有的子串的权值和最大。 思路分析: 最先容易想到的思路就是搜!管她3721。。直接一个字符一个字符的码,然后在AC自动机上判断最后的权值。TLE哟。 然后发现搜过不去,那就dp咯。再容易想到的就是dp[i][a][b][c][d] 表示此时遍历AC自动机的节点在i,然后构成了a个A,b原创 2014-10-02 17:55:01 · 1062 阅读 · 0 评论 -
Hnu 11187 Emoticons :-) (ac自动机+贪心)
题目大意: 破坏文本串,使之没有没有出现表情,破坏就是用空格替换。问最少需要破坏多少个字符。 思路分析: 初看跟Hdu 2457 没什么区别,其实Hdu2457是要求将字符替换成ACGT,而这个只需要替换成空格。 而空格是在表情串中不曾出现的,所以要破坏的时候就要遍历的指针赋为根节点,继续遍历。。 每一次变成根的时候ans就加一。 #include #include原创 2014-10-01 19:28:02 · 1001 阅读 · 0 评论 -
Poj 2778 DNA Sequence (AC自动机+矩阵)
题目大意: 给出N个串,问在长度为L的所有串中,不包含任一已知串的个数有多少个。 思路分析: 已知一个矩阵A,A[i][j] 表示 节点i 到 节点 j 有一条变可以到达的方法数。 那么A^2 ,这个矩阵的 [i][j] 就代表这个节点 i 到节点 j 有两条边可以到达的方法数。 那么知道这个结论,我们要做的就是求一个节点到另外一个节点,要经过L条变(对应这长度为L的单词),而又原创 2014-09-02 12:41:27 · 888 阅读 · 0 评论 -
Hnu 10104 病毒 (AC自动机+dfs)
病毒 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit users: 41, Accepted users: 23 Problem 10104 : No special judgement Problem description 二进制病原创 2014-09-03 11:51:08 · 1357 阅读 · 0 评论 -
SPOJ 7758. Growing Strings (ac自动机+dp)
题目大意: 给出了N个串。问最多有多少个串组成的序列,是可以由上一个串通过左右两边加字符构成的。 思路分析: 在trie上的dp 在建立自动机的时候,得到fail的同时,用dp记录这个串作为最后一个串所可以得到的最多的满足要求的串的数量。 那么 dp[i] = max(dp[i在trie上的的父亲节点],dp[i的fail节点] )+ 以i节点结尾的单词的数量,注意不是以i字符结原创 2014-08-29 14:36:33 · 947 阅读 · 0 评论 -
Zoj 3430 Detect the Virus (AC自动机)
题目大意: 给出来n条64base的病毒编码序列。 再给出m条模式串,让你反编码之后求出里面包含多少病毒序列。 思路分析: 很裸的AC自动机了。但是各种恶心。 动态开trie 静态开queue 就会RE。 全部动态开辟就会MLE。 各种姿势之后静态开trie 动态开queue才能AC。 #include #include #include #include原创 2014-08-27 13:37:37 · 756 阅读 · 0 评论 -
hdu 3065 病毒侵袭持续中 (ac 自动机)
思路分析: 重要的是query 的时候 ,如果这个字母原创 2014-06-10 00:03:38 · 652 阅读 · 0 评论 -
hdu 2896 病毒侵袭 (ac自动机)
思路分析: query 的时候不要b原创 2014-06-09 18:22:09 · 678 阅读 · 0 评论 -
Hdu 3962 Microgene (AC自动机+矩阵)
题目大意: 构造一个串使得有两个以及两个以上的目标串。长度为L的所有串中有多少个这样的串。 思路分析: 用所有的数量减去只有1个和没有目标串的数量就是答案了。 如果数据很小,可以用dp解。dp[i][j][k] 表示长度为i,走到自动机的j,有k个目标串的数量。 转移便是。 if(j->next[d] ->isword) dp[i+1][j->next][1] += dp[i]原创 2014-10-04 19:47:20 · 1321 阅读 · 0 评论