ACM-ICPC 培训资料汇编
( 2)
基本数据结构与算法分册
(版本号 1.0.0)
哈尔滨理工大学 ACM-ICPC 集训队
2012 年 10 月
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- I -
序
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 培训资料汇编
- II -
编写说明
本资料为哈尔滨理工大学 ACM-ICPC 集训队自编自用的内部资料,不作为商业销售目
的,也不用于商业培训,因此请各参与学习的同学不要外传。
本分册大纲由黄李龙编写,内容由姜喜朋、侯生智、包春志、孟祥凤、曾卓敏、彭文
文等分别编写。
本分册内容由彭文文、孟祥凤校核。
本分册内容大部分采编自各 OJ、互联网和部分书籍。在此,对所有引用文献和试题的
原作者表示诚挚的谢意!
由于时间仓促,本资料难免存在表述不当和错误之处,格式也不是很规范,请各位同
学对发现的错误或不当之处向[email protected]邮箱反馈,以便尽快完善本文档。在此对
各位同学的积极参与表示感谢!
哈尔滨理工大学在线评测系统( 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 年 10 月
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- III -
目 录
序…….............................................................................................................................................. I
编写说明.........................................................................................................................................II
第 1 章 基本数据结构....................................................................................................................1
1.1 顺序表...................................................................................................................................1
1.1.1 基本原理........................................................................................................................1
1.1.2 解题思路........................................................................................................................5
1.1.3 模板代码........................................................................................................................5
1.1.4 经典题目........................................................................................................................8
1.2 单链表.................................................................................................................................10
1.2.1 基本原理......................................................................................................................10
1.2.2 解题思路......................................................................................................................19
1.2.3 模板代码......................................................................................................................19
1.2.4 经典题目......................................................................................................................26
1.2.5 扩展变形......................................................................................................................31
1.3 双向链表.............................................................................................................................31
1.3.1 基本原理......................................................................................................................31
1.3.2 解题思路......................................................................................................................33
1.3.3 模板代码......................................................................................................................33
1.3.4 经典题目......................................................................................................................37
1.3.5 扩展变形......................................................................................................................37
1.4 循环链表.............................................................................................................................37
1.4.1 基本原理......................................................................................................................37
1.4.2 解题思路......................................................................................................................39
1.4.3 模板代码......................................................................................................................39
1.4.4 经典题目......................................................................................................................41
1.5 栈.........................................................................................................................................43
1.5.1 基本原理......................................................................................................................43
1.5.2 解题思路......................................................................................................................46
1.5.3 模板代码......................................................................................................................46
1.5.4 经典题目......................................................................................................................48
1.5.5 扩展变形......................................................................................................................49
1.6 队列.....................................................................................................................................49
1.6.1 基本原理......................................................................................................................49
1.6.2 解题思路......................................................................................................................55
1.6.3 模板代码......................................................................................................................55
1.6.4 经典题目......................................................................................................................58
1.6.5 扩展变形......................................................................................................................59
1.7 串.........................................................................................................................................59
1.7.1 基本原理......................................................................................................................59
1.7.2 经典题目......................................................................................................................65
1.7.3 扩展变形......................................................................................................................67
1.8 二叉树.................................................................................................................................67
哈尔滨理工大学 ACM-ICPC 培训资料汇编
- IV -
1.8.1 基本原理......................................................................................................................67
1.8.2 二叉树..........................................................................................................................68
1.8.3 模板代码......................................................................................................................69
第 2 章 排序..................................................................................................................................72
2.1 冒泡排序.............................................................................................................................72
2.1.1 解题思路......................................................................................................................72
2.1.2 模板代码......................................................................................................................72
2.1.3 经典题目......................................................................................................................72
2.1.4 扩展变型......................................................................................................................73
2.2 插入排序.............................................................................................................................73
2.2.1 基本原理......................................................................................................................74
2.2.2 模板代码......................................................................................................................74
2.2.3 经典题目......................................................................................................................74
2.3 归并排序.............................................................................................................................75
2.3.1 基本原理......................................................................................................................75
2.3.2 解题思路......................................................................................................................76
2.3.3 模板代码......................................................................................................................76
2.3.4 经典题目......................................................................................................................76
2.4 快速排序.............................................................................................................................78
2.4.1 基本原理......................................................................................................................78
2.4.2 解题思路......................................................................................................................78
2.4.3 模板代码......................................................................................................................79
2.4.4 经典题目......................................................................................................................79