ACM-ICPC如何起步

时间:2024-12-05 20:03:44

刚刚绝定投身ACM-ICPC的同学先要过两关。

第一关:程序设计语言

如果学校有开设相关课程,则省去了很多麻烦。如果没有则可以选择《程序设计导引及在线实践》作为教材。现在的比赛中允许使用的语言相对局限,建议c和c++至少掌握一种。java可以在后面的做题过程中慢慢学习。
其实刚开始只需要掌握语言的基本语法就可以开始做题了。在做题过程中慢慢熟练语言的技巧。

第二关:英语

掌握了程序设计语言之后要开始做题了,发现题目都是英文的读不懂,怎么办?请同学们注意,不要才用上网搜中文翻译或者用软件进行全文翻译的方法,这样英文水平很难提高。要硬着头皮坚持读原版英文题,不会的单词可以查词典或者屏幕取词。这样英文阅读能力会逐渐有所提升。很快就可以脱离词典。

现在可以开始正式的训练了。训练初期,方法非常简单,就是在OJ上找一些简单题做,想获取简单题题号可以百度搜索“某oj简单题”,个人推荐POJ(http://poj.org/)。
训练的过程中要注意如下问题:

1. 写解题报告

解题报告是为同学们的复习提供方便,就像课堂笔记一样。如果不写,有许多做过的题都会忘记,那做题对能力的提高就很小。因为目的是备忘,所以对于自己独立完成的题目可以简写。对于通过参考网上答案来完成的题目要细写。细写的解题报告要包含三部分:问题描述、解决办法、代码。详细程度要达到在自己完全忘记这道题的情况下通过解题报告能够了解题意和解题过程。写了解题报告还不算完,记得定期复习。

2. 写算法描述

做题的时候可能会接触到一些自己没学过的算法。在学习之后,需要用自己容易理解表达方式对算法进行描述,详细程度也是要让自己在完全忘记该算法的情况下能通过它迅速了解算法的原理或流程。同样记得定期复习。

3. 独立思考

做题可能遇到三种情况: 第一,独立思考就能完成,则略写解题报告。第二,需要上网找答案,但是并没有涉及到新算法,则详写解题报告。第三,需要上网找答案且涉及新算法,则详写解题报告,写算法总结。这三种情况中的后两种,即遇到不会做的题时,记得不要太急于上网找答案,先要充分地独立思考。这也是无数大牛强调的,对能力的提升有极大的帮助。但独立思考也要掌握分寸,思考时间过长会身心俱疲且浪费时间。

4. 查找答案

上述第三种情况可能直接看别人的解题报告并不能解决问题,因为解题报告通常只从算法的应用角度进行描述,并不描述算法本身。因此,要学习新算法还要上网搜索该算法的描述来进行学习,可以选择百度百科或者文库。

5. 写代码

写代码的过程中注意变量的命名,函数的抽象,如果时间不是十分紧迫的话,一定要保证程序结构清晰可读性强。因为整洁的代码可以大大提高DEBUG的效率。有些细节的处理可以参考网上别人的代码,学习一些细节处理的小技巧。尤其是第一次学习某个算法的时候,一定要阅读多种别人对该算法实现的代码,选择最适合自己作为以后自己的实现方法。

6. 整理模板

这个的难度要求就比较大,要求同学们做题后从自己的代码中提取那些可复用的部分(别的题也可以用的代码)保存成模板以后使用。先说明一下原因,现场赛可以带纸质资料,总结的模板是可以在比赛中用到的,可提高打代吗的速度和正确性。而别人总结的模板也可以用,但有时会出现用起来不顺手或者功能不全等问题。因此,总结自己的模板是必要的。为了复用性可以对代码做适当修改。注意添加注释说明,详细程度要达到在自己忘了这个模板的用法的情况下能通过说明了解其用法。

总体来说,初期的训练方法就是在OJ做题,通过做题来学习算法和提高各方面能力。当然有机会的要多在实战中锻炼自己。个人不建议单独看书学习算法,因为没有足够题目的强化,算法很容易忘记。

同学们如果有什么问题可以直接在下面提问,我会将普遍问题和答案添加到文章中。