AC自动机

    有了KMP和Trie的基础,就可以学习神奇的AC自动机了。AC自动机其实就是在Trie树上实现KMP,可以完成多模式串的匹配。

          AC自动机 其实 就是创建了一个状态的转移图,思想很重要。

          推荐的学习链接:

http://acm.uestc.edu.cn/bbs/read.php?tid=4294

http://blog.csdn.net/niushuai666/article/details/7002823

http://hi.baidu.com/nialv7/item/ce1ce015d44a6ba7feded52d

 

         AC自动机专题训练链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25605#overview     这里我提交的代码是公开的,可以看到

         题目来源:http://www.notonlysuccess.com/index.php/aho-corasick-automaton/

写AC自动机的代码风格是向昀神学的,好简洁,写起来好棒的感觉。

1、HDU 2222 Keywords Search    最基本的入门题了

就是求目标串中出现了几个模式串。

很基础了。使用一个int型的end数组记录,查询一次。

View Code

2、HDU 2896 病毒侵袭   

这题和上题差不多,要输出出现模式串的id,用end记录id就可以了。还有trie树的分支是128的

题解here

View Code

3、HDU 3065 病毒侵袭持续中

 

这题的变化也不大,就是需要输出每个模式串出现的次数,查询的时候使用一个数组进行记录就可以了

View Code

 

4、ZOJ 3430 Detect the Virus

主要是解码过程,解码以后就是模板题了。

求出现的模式串的种类数

分支需要256个

 

View Code

5、POJ 2778 DNA Sequence

AC自动机+矩阵加速

这个时候AC自动机 的一种状态转移图的思路就很透彻了。

AC自动机就是可以确定状态的转移。

View Code

6、HDU 2243 考研路茫茫——单词情结

 

这题和上题有些类似。但是需要求和。

所以给矩阵增加一维,这样可以完美解决

题解here

View Code

7、POJ 1625 Censored!

 AC自动机+DP+高精度

好题

题解here

 

View Code

 

8、HDU 2825 Wireless Password

AC自动机+状态压缩DP

相当于在AC自动机上产生状态转移,然后进行dp

View Code

 

9、HDU 2296 Ring

需要输出字典序最小的解

在DP的时候加一个字符数组来记录就行了

View Code

 

10、HDU 2457 DNA repair

很简单的AC自动机+DP了

View Code

 

11、ZOJ 3228 Searching the String

这题需要查询两种,一种是可重叠,一种是不可重叠的。

找模式串在目标串中的出现次数。

加一个数组记录上一次出现的位置,然后就可以求出不可重叠的了

View Code

 

12、HDU 3341 Lost's revenge

这题主要是状态的表示,就是记录ACGT出现的次数。

然后这个ACGT次数表示的时候,状态要转化。

题解here

View Code

 

13、HDU 3247 Resource Archiver

使用最短路预处理出状态的转移。这样可以优化很多

View Code

 

14、ZOJ 3494 BCD Code

 

这道题很神,数位DP和AC自动机结合,太强大了。

题解here

View Code

 

 

 

先简单总结到这吧!抱歉,时间原因,写得很简单,以后有机会好好补充完全吧!

 

posted @ 2015-07-23 18:19  柳下_MBX  阅读(182)  评论(0编辑  收藏  举报