扩展:算法竞赛-培养杰出程序员的捷径
- 杰出的程序员往往具备:
- 掌握多种编程语言
- 代码量大
- 算法知识丰富
- 数学强
- 做过很多项目
- 有团队精神
- 有创新意识
- 会选择行业方向
- etc…
比尔·盖茨曾说过:“如果你想雇用一个工程师,看看他写的代码就够了。如果他没写过大量代码,就不要雇用他。”通过编写大量代码,能做到算法精妙合理、逻辑清晰透彻、代码喷涌而出、格式赏心悦目、挑 bug手到擒来,这是杰出程序员的基本功。ACM-ICPC 竞赛队员想达到在区域赛中获奖的水平,需要写5~10万行的代码。
算法竞赛入门
- ACM-ICPC(Association for Computing Machinery-International Collegiate Programming Contest): ACM国际大学生程序设计竞赛
- NOIP(National Informatics Olympic League): 全国信息学奥林匹克联赛
1. 竞赛语言和训练平台
Notice:其中“洛谷试炼场”题目分类比较全,是很好的基础学习平台。
2. 判题和基本的输入输出
- OJ的判题
-
OJ由机器自动判题,但机器并没有看懂代码的智能;即使是人工判题,人也很难短时间看懂程序。
-
OJ判题是一种黑盒测试,它并不关心程序的内容,而是用测试数据来验证。
- OJ的判题结果
- 打表
- 由于OJ不看程序内容,只关心程序的输入和输出,因此,在程序中不写详细过程,而是用printf或cout直接打印结果,也是允许的,这种方法叫“打表”。
- 另外,程序可能需要预处理数据,这个做法也称为“打表”。
- 输入输出函数
-
C++:输入函数cin,输出函数cout。
-
C语言:输入函数scanf,输出函数printf。
- 标准输入输出
Description:OJ默认使用stdin和stdout,所以在提交程序时,并不用管OJ是怎么进行数据测试的。
Notice:如果用到其它方法,会特别说明。
- 输入的结束-多组输入(以C语言为例)
-
默认结束(结束条件为无内容输入)
int main(void){ int a, b; <