POJ1204 Word Puzzles AC自动机
来源:互联网 发布:阿里云 端口开放 编辑:程序博客网 时间:2024/04/27 19:14
Problem Address:http://poj.org/problem?id=1204
【前言】
一道算是比较简单的AC自动机的题。
开始的时候,出于对第一份AC自动机代码的怀疑以及对上一份小变种的担忧,所有调试了好久。
现在发现,第一次的那份代码可靠性是极强的。
时限是5s,本来以为要跑很久,结果一出来1s都不到。爽快!
但是关于AC自动机的好多应用还是有很大难度的,还得继续努力学习。
【思路】
先简单地构造出AC自动机(以w个单词为词典)。
然后写查询函数。
简单地说,就是对puzzle里的每一个字母开始向八个方向形成八个字符串,在自动机中查询这些字符串以寻求匹配。
查询函数可参考:http://blog.csdn.net/Human_CK/archive/2011/06/27/6569992.aspx(只是参考)
对于给定的字符串,从根节点开始匹配,如果无法继续则转向其失败指针所指节点。
在匹配的过程中,如果发现某个节点是某个单词的结尾,即从根节点到该节点可形成一个单词,则说明在给定的字符串中匹配到了这个单词,把这个单词的开始位置以及其方向记录下来。记录过的单词可以标记,以便之后不再找到。不过由于这道题是Special Judge,所以有没有做这一步都无所谓,做了只是增加一点小开销罢了。
注意找到之后不能跳出循环,而应该继续搜索下去,否则无法达到要求。
如果对puzzle里的每个字母都进行八个方向的搜索,那么会有很多搜索是重复的。
比如从第一个字母向右,和从第二个字母向右,这两种情况,第一种是包含了第二种的。
所以可以总结为几种情况进行搜索。
当然,代码量也因此而有所增加。
【代码】
【P.S】
其实我觉得这份代码还是挺长的,有时候都没有勇气写这种代码。
但是,这毕竟是一条必经之路,如果想取得好成绩的话。
在以后,这种长度的代码也许是很常见的。
无论如何,加油!
- POJ1204 Word Puzzles AC自动机
- POJ1204--Word Puzzles--AC自动机
- 【POJ1204】Word Puzzles-AC自动机
- 【POJ1204】Word Puzzles——AC自动机
- POJ1204 Word Puzzles
- poj1204 Word Puzzles
- POJ1204-Word Puzzles
- poj1204(AC自动机)
- poj1204之AC自动机
- POJ1204 AC自动机
- poj 1204:Word Puzzles(AC自动机)
- poj 1204 Word Puzzles AC自动机
- POJ 1204 Word Puzzles AC自动机
- poj - 1204 - Word Puzzles(AC自动机)
- poj 1204 Word Puzzles (AC自动机)
- POJ 1204 Word Puzzles AC自动机题解
- poj 1204 Word Puzzles (ac自动机)
- POJ 1204 Word Puzzles (AC自动机)
- LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
- ExpandableListView 小例子
- rts-threshold RTS/CTS握手信号阀值
- RTEMS 的小技巧(2011.6.30.)
- 适合中国电脑安装的杀毒软件等
- POJ1204 Word Puzzles AC自动机
- Pydev在eclipse下的中文支持
- 获得控件的决定位置。
- 二维条码目前应用
- CentOS 安装rarlinux 压缩解压 .rar
- 怎么查看系统是32位还是64位的?
- c++中的常见泄漏
- 缘
- .NET中使用Protobuffer 实现序列化和反序列化