ACM-ICPC 培训资料汇编
( 5)
字符串处理、搜索分册
(版本号 1.0.0)
哈尔滨理工大学 ACM-ICPC 集训队
2012 年 12 月
哈尔滨理工大学 ACM-ICPC 培训资料汇编
序
2012 年 5 月,哈尔滨理工大学承办了 ACM-ICPC 黑龙江省第七届大学生程序设计竞
赛。做为本次竞赛的主要组织者,我还是很在意本校学生是否能在此次竞赛中取得较好成
绩,毕竟这也是学校的脸面。因此,当 2011 年 10 月确定学校承办本届竞赛后,我就给齐
达拉图同学很大压力,希望他能认真训练参赛学生,严格要求受训队员。当然,齐达拉图
同学半年多的工作还是很有成效,不仅带着黄李龙、姜喜鹏、程宪庆、卢俊达等队员开发
了我校的 OJ 主站和竞赛现场版 OJ,还集体带出了几个比较像样的新队员,使得今年省赛
我校取得了很好的成绩(当然,也承蒙哈工大和哈工程关照,没有派出全部大牛来参
赛)。
在 2011 年 9 月之前,我对 ACM-ICPC 关心甚少。但是,我注意到我校队员学习、训练
没有统一的资料,也没有按照竞赛所需知识体系全面系统培训新队员。 2011-2012 年度的
学生教练们做了一个较详细的培训计划,每周都会给 2011 级新队员上课,也会对老队员
进行训练,辛辛苦苦忙活了一年——但是这些知识是根据他们个人所掌握情况来给新生讲
解的,新生也是杂七杂八看些资料和做题。在培训的规范性上欠缺很多,当然这个责任不
在学生教练。 2011 年 9 月,我曾给老队员提出编写培训资料这个任务,一是老队员人数
少,有的还要去百度等企业实习;二是老队员要开发、改造 OJ;三是培训新队员也很耗费
精力,因此这项工作虽很重要,但却不是那时最迫切的事情,只好被搁置下来。
2012 年 8 月底, 2012 级新生满怀梦想和憧憬来到学校,部分同学也被 ACM-ICPC 深深
吸引。面对这个新群体的培训,如何提高效率和质量这个老问题又浮现出来。市面现在已
经有了各种各样的 ACM-ICPC 培训教材,主要算法和解题思路都有了广泛深入的分析和讨
论。同时,互联网博客、 BBS 等中也隐藏着诸多大牛对某些算法的精彩论述和参赛感悟。
我想,做一个资料汇编,采撷各家言论之精要,对新生学习应该会有较大帮助,至少一可
以减少他们上网盲目搜索的时间,二可以给他们构造一个相对完整的知识体系。
感谢 ACM-ICPC 先辈们作出的杰出工作和贡献,使得我们这些后继者们可以站在巨人
的肩膀上前行。
感谢校集训队各位队员的无私、真诚和抱负的崇高使命感、责任感,能够任劳任怨、
以苦为乐的做好这件我校的开创性工作。
唐远新
2012 年 10 月
哈尔滨理工大学 ACM-ICPC 培训资料汇编
编写说明
本资料为哈尔滨理工大学 ACM-ICPC 集训队自编自用的内部资料,不作为商业销售目
的,也不用于商业培训,因此请各参与学习的同学不要外传。
本分册大纲由黄李龙编写,内容由卢俊达、黄李龙等分别编写和校核。
本分册内容大部分采编自各 OJ、互联网和部分书籍。在此,对所有引用文献和试题的
原作者表示诚挚的谢意!
由于时间仓促,本资料难免存在表述不当和错误之处,格式也不是很规范,请各位同
学对发现的错误或不当之处向acm@hrbust.edu.cn邮箱反馈,以便尽快完善本文档。在此对
各位同学的积极参与表示感谢!
哈尔滨理工大学在线评测系统( Hrbust-OJ)网址: http://acm.hrbust.edu.cn,欢迎各位
同学积极参与AC。
国内部分知名 OJ:
杭州电子科技大学: http://acm.hdu.edu.cn
北京大学: http://poj.org
浙江大学: http://acm.zju.edu.cn
以下百度空间列出了比较全的国内外知名 OJ:
http://hi.baidu.com/leo_xxx/item/6719a5ffe25755713c198b50
哈尔滨理工大学 ACM-ICPC 集训队
2012 年 12 月
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- III -
目 录
序…….......................................................................................................................................... I
编写说明..................................................................................................................................... II
第 4 章 字符串处理....................................................................................................................5
4.1 BM算法..............................................................................................................................5
4.1.1 基本原理....................................................................................................................5
4.1.2 模板代码....................................................................................................................5
4.1.3 经典题目....................................................................................................................6
4.2 前缀函数( Prefix function) KMP的next函数 ...............................................................8
4.2.1 基本原理....................................................................................................................8
4.2.2 模板代码....................................................................................................................8
4.2.3 经典题目....................................................................................................................8
4.3 KMP算法 .........................................................................................................................10
4.3.1 基本原理..................................................................................................................10
4.3.2 模板代码..................................................................................................................11
4.3.3 经典题目..................................................................................................................11
4.4 RK字符串匹配算法( RK-hash) ..................................................................................13
4.4.1 基本原理..................................................................................................................13
4.4.2 模板代码..................................................................................................................13
4.4.3 经典题目..................................................................................................................14
4.5 扩展KMP( Z function, Extended KMP) ...................................................................15
4.5.1 基本原理..................................................................................................................15
4.5.2 模板代码..................................................................................................................15
4.5.3 经典题目..................................................................................................................16
4.6 字典树( Trie树) ..........................................................................................................17
4.6.1 基本原理..................................................................................................................17
4.6.2 模板代码..................................................................................................................18
4.6.3 经典题目..................................................................................................................18
4.7 后缀数组.........................................................................................................................21
4.7.1 基本原理..................................................................................................................21
4.7.2 模板代码..................................................................................................................23
4.7.3 经典题目..................................................................................................................24
4.8 AC自动机.........................................................................................................................26
4.8.1 基本原理..................................................................................................................26
4.8.2 模板代码..................................................................................................................27
4.8.3 经典题目..................................................................................................................28
4.9 后缀自动机.....................................................................................................................36
4.9.1 后缀自动机介绍......................................................................................................36
4.9.2 例题讲解..................................................................................................................43
4.9.3 其他应用后缀自动机的题目..................................................................................51
第 5 章 搜索..............................................................................................................................52
5.1 深度优先搜索.................................................................................................................52
5.1.1 经典题目 1...............................................................................................................52
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- IV -
5.1.2 经典题目 2...............................................................................................................53
5.1.3 经典题目 3...............................................................................................................55
5.1.4 经典题目 4...............................................................................................................56
5.2 广度优先搜索.................................................................................................................58
5.2.1 基本原理..................................................................................................................58
5.2.2 经典题目..................................................................................................................58
5.3 分支定界法.....................................................................................................................61
5.3.1 基本原理..................................................................................................................61
5.3.2 经典题目..................................................................................................................61
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- 5 -
第4章 字符串处理
4.1 BM 算法
参考文献:
《BM 算法详细图解》 Weisteven
扩展阅读:
南柯一喵: http://www.cnblogs.com/a180285/archive/2011/12/15/BM_algorithm.html
编写:卢俊达 校核:黄李龙