![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AC自动机
文章平均质量分 81
enmity_dark
这个作者很懒,什么都没留下…
展开
-
hdu 2222 Keywords Search
AC自动机模板题,用队列搞定。需要注意的是单词有可能会重复!#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"using namespace std;char a[10原创 2014-05-20 19:19:25 · 514 阅读 · 0 评论 -
[AC自动机+dp] whu oj 1572 I - Cyy and Fzz
题意:给你n个串,求长度为l的串包含n个串个数的期望。思路:自动机dp[i][j][k] 长度为i在节点j状态为k的概率。然后遍历一遍求期望。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"原创 2015-05-13 23:52:32 · 682 阅读 · 0 评论 -
[AC自动机+dp+高精度] poj 1625 Censored!
题意:给一个长度为N的字符串,表示有N个字符可用。再给p个不能含有的病毒串。为你长度为M的串不含有任意一个病毒串的方案数。思路:由于不需要取模,50^50需要用到高精度。因为题目的字符串大于32所以可以直接scanf输入。输入完map一下就好了。就是裸的自动机dp了。代码:#include"stdio.h"#include"algorithm"#incl原创 2015-04-14 10:13:16 · 635 阅读 · 0 评论 -
[AC自动机+数位dp] zoj 3494 BCD Code
题意:需要将十进制数转换成二进制的BCD码。例如127=0001 0010 0111。然后给你N个病毒串,问十进制A~B范围内,转换成BCD码不含有任何一个病毒串的数有多少个。思路:将这自动机和数位dp结合起来真是很巧妙。其实也不难想。对于数位dp来说,我每次放i到某一位上的时候,其实就是进行了相应的节点移动。比如我要放一个1,其实就是从当前节点往后顺着走了0->0->0-原创 2015-03-10 09:52:07 · 511 阅读 · 0 评论 -
[AC自动机+状压dp] hdu 4534 郑厂长系列故事——新闻净化
题意:中文的题目,意思就是说有很多串,每个串都有权值,权值为999的串必须出现,-999的串必须不出现。权值在-999~999之间。然后必须出现的串不超过8个。然后给一个全为小写目标串,问最少需要删除多少个字母才能够保证必须出现的串都出现,次数一样保证权值最大。输出次数和权值。然后根据样例,那些必须出现的串,其实权值是0。思路:很明显一开始建自动机构成trie图,但是需要注原创 2015-03-10 09:28:57 · 1958 阅读 · 0 评论 -
[AC自动机+dp] hdu 2457 DNA repair
题意:给N个单词,再给一个串str (只含A、G、C、T)问对于str要至少修改几个字符能不含有N个单词思路:建立trie图,做自动机dpdp[i][j] 代表走过str的i个字母在j节点至少需要修改几个字符 trie *p=node[j]->next[k]; if(p->mark) continue; //不可达 dp[i][p->id]=min(dp[i][原创 2014-10-15 12:05:20 · 780 阅读 · 0 评论 -
[AC自动机+状压dp] hdu 2825 Wireless Password
题意:给n,m,k ,再给出m个单词问长度为n的字符串,至少在m个单词中含有k个的组成方案有多少种。思路:由于m最大是10,所以可以采取状压的思想首先建立trie图,在每个单词的结束节点标记一个mark=(1然后需要注意的,对于每个节点,应该顺着fail指针遍历一遍,把所有的mark取一个并集。因为就是如果单词出现包含的话,比如 she和he 我拿了she,其实等于原创 2014-10-15 12:12:33 · 736 阅读 · 0 评论 -
[AC自动机+dp+记录路径] hdu 2825 Ring
题意:给N个长度,M个单词,每个单词有权值输出长度不大于N的权值和最大的单词代价相同输出长度短的,长度相同输出字典序最小思路:开一个字符串数组,暴力存储每个节点的单词!其他思路和dp都一样注意:如果和为零的话输出空串。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#原创 2014-10-21 11:10:15 · 758 阅读 · 0 评论 -
[AC自动机+dp+矩阵快速幂] poj 2778 DNA Sequence
AC自动机+矩阵快速幂经典题,原创 2014-05-20 20:28:52 · 715 阅读 · 0 评论 -
[AC自动机+spfa+状压dp] hdu 3247 Resource Archiver
题意:给n个本源串,m个病毒串求一个最多的长度的单词包含所有的本源串并不包含任意一个病毒串串均为01串思路:只有10个本源串一开始想的是直接建立完trie图 然后在图上直接spfa结果发现 dis[60005][1030] 超内存了这个时候就要想到其实只有节点的mark值大于0的节点是我们需要用的就是那些含有状压权值的节点那么我们先记录下这些节点是哪些原创 2014-11-01 15:19:39 · 819 阅读 · 0 评论 -
[AC自动机+概率dp] hdu 3689 Infinite monkey theorem
题意:给n个字母,和m次数。然后输入n个字母出现的概率然后再给一个目标串str然后问m次中敲出目标串的概率是多少。思路:AC自动机+概率dp的简单题。首先建立trie图,然后就是状态转移了dp版本: dp三重循环变量次数,节点数,和字母数代码:#include"cstdlib"#include"cstdio"#include"cstring"#in原创 2014-10-14 13:53:50 · 977 阅读 · 0 评论 -
[AC自动机+dp+变进制状压] hdu 3341 Lost's revenge
题意思路摘自大神:http://www.cppblog.com/menjitianya/archive/2014/07/11/207604.html#207622题意:给定N(N 题解:利用模式串建立trie图,trie图上最多有500个结点( N*10 ),然后朴素的思想就是用S(i, iA, iC, iG, iT)表示在i状态下,拥有iA个A、iC个C、iG个G、iT个T的串拥有的原创 2014-10-31 10:17:04 · 908 阅读 · 0 评论 -
[AC自动机] zoj Searching the String
题意:给一个原串,再给n个串,每个串有属性,属性0代表可以重叠,1代表不可以重叠问每个串出现了多少次思路:为了方便建立两个自动机(0的一个,1的一个)然后可以重叠的很好做,以前都做过不可重叠的话需要记录两个东西len[i]代表每个串的长度,used[i]代表每个串在之前出现的位置,初始化-1然后遍历到的时候对于当前位置 j, 必须j>=used[i]+len[i]原创 2014-10-11 10:22:14 · 731 阅读 · 0 评论 -
poj 1204 Word Puzzles
就是8个方向搜索单词,主要位置的移动就OK了。水水的AC自动机~~这么长的shuj原创 2014-05-20 20:18:58 · 561 阅读 · 0 评论 -
hdu 2896 病毒侵袭
本题需要注意几个方面:1、字符的范围是可见的ASCLL码字符,zhuy原创 2014-05-21 09:10:45 · 607 阅读 · 0 评论 -
hdu 3065 病毒侵袭持续中
全全类似kmp般的匹配,需要注意的是 当出现不合法字符的时候 要p原创 2014-05-20 20:14:40 · 726 阅读 · 0 评论 -
[后缀数组+dp/AC自动机+dp+线段树] hdu 4117 GRE Words
题意:给你N个字符串, N(1 问不打乱字符串顺序,从中取若干个字符串,使得前一个串是后一个串的子串,求满足前面调条件的字符串值得和最大,求这个值。思路:其实就是一个很明显的dp。dp[i]代表以第i个字符串结尾的最大权值。但是就是子串这个问题怎么处理。由于这题数据比较水可以用后缀数组处理这个问题。将所有字符串拼接,做sa。每次在height数组里往上和往下寻找原创 2015-04-17 13:25:05 · 923 阅读 · 0 评论