ACM-ICPC 培训资料汇编
( 1)
新生常见程序问题与操作指南
(版本号 1.0.0)
哈尔滨理工大学 ACM-ICPC 集训队
2012 年 12 月
1
序
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 月
2
编写说明
本资料为哈尔滨理工大学 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 年 12 月
3
目 录
第一章 认识ACM与集成开发环境Code::blocks...................................................................6
1.1 认识ACM...................................................................................................................6
1.2 了解集成开发环境Code::blocks...............................................................................6
1.3 获取并安装Code::blocks...........................................................................................7
1.4 使用Code::blocks建立C/C++源文件........................................................................7
1.5 代码的编译..............................................................................................................10
1.6 在Code::blocks中快速复制粘贴代码.....................................................................10
1.7 Code::blocks使用问题..............................................................................................10
1.8 本章总结..................................................................................................................12
第二章 ACM在线评测系统的使用说明..............................................................................13
2.1 注册一个在线评测系统帐号..................................................................................13
2.2 在线评测系统的FAQ ..............................................................................................13
2.3 在线提交问题..........................................................................................................15
2.4 在线评测系统的其它功能......................................................................................16
2.5 本章总结..................................................................................................................17
第三章 代码书写规范与标准...............................................................................................18
3.1 代码书写规范的重要性..........................................................................................18
3.2 代码的缩进格式与空格..........................................................................................19
3.3 函数及变量的命名规则..........................................................................................22
3.4 对与代码书写规范的总结......................................................................................22
3.5 本章总结..................................................................................................................23
第四章 C/C++初步基础的常见错误与ACM例题分析.......................................................24
4.1 标识符与主函数的问题..........................................................................................24
4.2 符号问题..................................................................................................................24
4.3 变量的赋值与初始化..............................................................................................25
4.4 声明、定义与重定义问题......................................................................................25
4.5 数据范围问题..........................................................................................................25
4.6 运算符优先级问题..................................................................................................26
4.7 条件运算符..............................................................................................................26
4.8 表达式的表示..........................................................................................................26
4.9 除法问题..................................................................................................................27
4.10 空语句问题............................................................................................................27
4.11 本章总结................................................................................................................28
第五章 ACM中的输入输出..................................................................................................29
5.1 输入输出函数与ACM.............................................................................................29
5.2 格式控制符..............................................................................................................29
5.3 取址运算符与输入输出函数..................................................................................29
5.4 单个字符的读入与getchar函数 ..............................................................................30
5.5 gets函数与字符串 ....................................................................................................31
5.6 本章总结..................................................................................................................31
第六章 条件结构与循环结构...............................................................................................33
6.1 if条件语句的使用 ....................................................................................................33
6.2 if与else配对问题 ......................................................................................................33
6.3 判断变量与零值或其它值的关系..........................................................................34
6.4 循环语句..................................................................................................................35
6.5 循环语句的效率问题..............................................................................................35
6.6 break与continue语句 ................................................................................................36
6.7 分析死循环问题......................................................................................................36
4
6.8 本章总结..................................................................................................................36
第七章 函数的使用...............................................................................................................36
7.1 函数的定义与声明..................................................................................................37
7.2 函数体的书写规范..................................................................................................37
7.3 主函数的问题..........................................................................................................37
7.4 函数的调用..............................................................................................................38
7.5 函数的形参问题......................................................................................................38
7.6 本章总结..................................................................................................................40
第八章 数组与C/C++编程....................................................................................................41
8.1 数组的性质..............................................................................................................41
8.2 数组的定义及初始化问题......................................................................................41
8.3 数组的下标问题......................................................................................................41
8.4 数组大小的讨论......................................................................................................41
第九章 字符串及字符串的处理...........................................................................................43