Home 本文转自UESTC(电子科技大学)CDOJ Step-By-Step

title新的征程?

在第一次听到ACM这个名词之后,或许你心中还有各种疑惑?什么是ACM?搞ACM到底要学什么?ACM究竟是什么样子?ACM适合我吗?在回答这些问题之前,我希望你以ACM为关键字进行搜索,然后自行获取信息。

在问任何问题之前,先问搜索引擎。

这是一条黄金法则,不管你搞不搞ACM,它都会让你受益很长一段时间(以后也许会有更好的信息获取手段)。

狭义上说,ACM/ICPC只是一个比赛,由区域赛和世界总决赛组成,但是搞ACM的内涵远不止如此。除去ACM/ICPC,还有一打各式各样的算法竞赛,包括百度之星,有道难题,Google Code Jam,TCO等等比赛。在这些比赛中取得的优异名次,向来被IT公司所看重。

既然是算法程序设计竞赛,搞ACM的主要就是两件事——一是学算法(看书或者论文),二是做算法题。

听上去很枯燥?事实上,我以为玩游戏和搞算法并没有什么本质上的区别。我们来看看什么是游戏。一般来说,游戏都是由一些任务或者问题组成。比如说植物大战僵尸就是让你种植物打败僵尸。同样,算法题不也是如此给你一个问题让你解决么?游戏要你的决策比较优化才能过关,做算法题不也同样需要高效的算法才能通过么?当你游戏玩不过去的时候就会去看攻略,我们做不来题的时候不也同样要去看书看论文学习么?玩游戏很难玩出名堂(只有顶尖高手才能以此为生),但是玩算法的不一样啊,不是顶尖高手也能让你受益无穷。

另外,有人要说了,那些之前搞过的优势会很大?当然,但人生挑战一下更高的难度不是更好玩么?既然之前已经输给别人了,那更要迎头赶上吧?再说,做一件事情之前总是想困难,永远做不成这件事吧?另外给你们一个利好消息:参加11年世界总决赛的三位队员,一个是大一校赛那段时间开始搞,一个是大一暑假,一个是到了大二校赛才开始。和他们同台竞技的,不乏从小学初中就开始搞的大牛神牛。他们虽然很早就开始搞,但是人的理解力是随着年龄和阅历逐步增长的,并且没读大学之前学业和升学的压力都很大,其实和我们的差距也并不是很大。如果我们全力以赴,可以在两三年内和他们具有差不多的实力。

title准备上路?

如果你已经决定开始学这个,那么你需要一点建议。我还是希望你先自己搜索(事实上网上这方面的信息相当的多,随便帮你们搜了两篇,仅供参考,点击下载)。

首先我希望你去买一本刘汝佳写的 《算法竞赛入门经典》,这本书是我见过的最好的入门书了,但是不要因为它简单就好高骛远。如果你能在几个月之内把这本书的算法完全掌握并且能通过书中推荐习题的60%以上,是一个相当不错的开局了。(什么?去哪买这书?利用网络吧!学校图书馆1楼的书店也有这书买,但不是总有)

练题是在OJ上进行的。至于什么是OJ,黄金法则,你懂的。

交题之后呢?在status页面会有你程序的返回信息。至于那些信息是什么意思,看FAQ(Frequently Asked Questions,常见问题解答)吧(我们CDOJ的FAQ)。

程序错了之后怎么办?你需要调试。怎么调试?为此我写了一篇调试入门的文档(点击此处下载),介绍了一些最基本的调试程序的方法。至于以后的呢,你可以使用黄金法则,当然你还应该从这些东西里面总结出究竟如何调试程序。

什么,网站是英文,题目也是英文不适应?这不正好么,做做英文算法题,四六级就过了。

然后就是参加Topcoder的SRM(Single Round Match),这是一个可以让你很快成长的优秀平台,虽然它的比赛规则和方式与ACM-ICPC有些区别。这个网上也有很多教程,我帮你们写了一份,自己阅读吧(点击此处下载)。另外,参加SRM最好下载一个插件,你可以在压缩包里面找到插件,至于使用方法嘛,请用黄金法则。

最后,强烈建议先编写一些思维难度低,程序实现简单的题目来熟练编程。刘汝佳《算法竞赛入门经典》里面有推荐。我们OJ的C语言上机题也很不错,不过有少量的题目存在着错误就是了。最后你也可以自己搜索一份简单题目列表(可以以“水题”为关键字进行搜索)。

titleQ&A

  • 我想进入校队集训,该怎么准备啊?

首先校赛之后会有一个算法的讲座。在那里会公布具体的校队选拔办法。当然是看实力。在此之前你可以先练着。做题,看书,总结之类的。进入校队之后会有暑假集训。2个月。一天一场比赛。根据你的每场比赛的表现来决定参加区域赛与否。区域赛表现优异,就可以去FINAL了。

  • 算法无法理解?

如果你自己都认为你没法理解,那你就真的没法理解了。正确的心态是,学习这个算法我遇到了困难。思考自己是从哪里开始无法理解,再次阅读。或者换一份材料,或者暂时放一放都是可以的。

  • 这题到底怎么做?

仔细思考之后若无思路,可以把OJ+题号作为关键字搜索:例如ZOJ XXXX CDOJ XXXX (poj or pku) XXXX。但不要养成直接看解题报告的习惯。

  • 那些家伙怎么这么牛X?

没有人生来就会算法,都是从新手逐渐成为大牛乃至神牛。其牛X的背后,自有别人辛勤的汗水。如果你一直努力的话,也会有一天别人把你当大牛的。

  • 我这么笨,可能不适合这竞赛吧?

金庸都知道,勤能补拙。你越暗示自己笨,你真的就会越来越笨。况且,所谓智商,据我所知,完全通过思维训练之类的提高。这样想还不如以这个竞赛为平台,每天来点思维训练,让你的大脑脱胎换骨。

title结语

时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……没有谁生来就是神牛,而千里之行,始于足下!