本文从笔者的亲身经历和一些所得所感,系统地写写关于ACM-ICPC算法竞赛方面的介绍,以及一些新手误区和入门的经验介绍。笔者搞过几年的ACM算fǎ竞赛,拿过几块省赛区域赛的牌子,带过一届新生以及做过助教;以某普通C语言零基础二本学生为例子,面向大一新生小白。如果你对ACM算法竞赛感兴趣的话,阅读下面的文章,希望可以对你有帮助!(没有学过C语言的话,可以看看经验引用,C语言自学快速起步指南)
工具/原料
建议参加学校的集训队,更有气氛或者相对专业点的指导!
一台普通电脑或者笔记本电脑!
若干合适书籍,坚持看下去!(下面有介绍)
方法/步骤
1、C语言及数据结构入门大纲个人吅大致总结以蛴蛩钔淞下阶段:第一阶段,先学习《C语言程序设计》基础语言知识,大多OJ上的前20扉钛笆哇0道题目都有配套的联系,掌握基础C语言语法,指针进阶和文件部分的内容可以暂时放放不看;建议C语言书,抽空就看看就敲敲,尽量前两个月就熟悉除指针进阶和文件部分的内容即可!第二阶段,接着推荐《啊哈算法》,算法分析生动形象,适合缺乏抽象思维的同学;全书只用C语言描述算法——有利有弊;《算法笔记》和《算法设计与分析》这几本书也很不错,内容详实,很适合竞赛入门知识准备(有集训队就通用的这本参考书);还有《挑战程序设计竞赛》这本书以及他的《挑战程序设计竞赛》--数据结构专题版也很好。推荐的书都很不错,有条件可以买下来(即使不看当枕头垫着也很舒服),图书馆大都有,可以借;算fǎ竞赛入门经典之类的书也很好——不建议能力不是很强的看。第三阶段,自我探索巩固建立知识体吅系;狂刷专题,切OJ,每周的Codeforce,以及可以将某大佬的博客的题集作为参考(见下图),依次刷完......还有,算fǎ竞赛是团体赛,需要培养队友或者寻找队友进行组队打比赛;有个志同道合的小伙伴一起刷题,才不会觉得十分无聊枯燥~~
2、新生误区OJ上的某些题目不必深究,不必吊死在一棵歪脖子题上——先放一放换一题就是;某些题目本身就有问题,数据也可能出现问题等。刷题尽量选在大的OJ,毕竟大的OJ后台数据更加严格,大的OJ题目类型更加丰富更加全面,网上的题解也更加丰富。基础题目尽量多想,实在不行就换个题目换种思路;不要急于百度找答吅案,不然很容易养成一遇见难题就搜答吅案的坏习惯;多和别人交流,在AC之后可以尝试搜搜题解,没准会有新的收获,或者会提升自己的代码技巧。多交liú可以发现自己的代码不足,闭门造车不推荐(不排除你的能力真的很强,比如几个月A完上的好几页水题)。还有就是刷水题攀比的现象,为了名次直接百度答吅案复制粘贴——没什么意义;骨灰级学长之前强调过:“刷水题要适可而止,前200道就足够了。”我也觉得怪合理,之前我就在水题上刷了三四百题——后来才感觉浪费了很多系统训练的时间;提个醒,建议能力差的同学就水题做两百道就去看书吧,构建系统的知识体吅系(按照上面的推荐来)。英语不能放弃,最好从大一开始背四级词汇,背完背六级单词;对理解后面的英文题目有很好的帮助。推荐某词斩,形象生动。
3、ACM竞赛的心态不要好高骛远(四曷玫樨很多方面),脚踏实地,能够沉住气坐得下去,推荐的书籍最好拿准一本就一直看下去;我看的书不少,但认真看下去的没几眺螗熨膣本,借的书一大堆也没什么用(大多都用来睡觉枕头了)。半途而废的童靴也不在少数,最后能陪你一直走到省赛的伙伴都很不容易;最好能拉住宿舍里的一个室友陪你一起,集体开黑敲代码刷榜单(这是多么激动人心的一件事);同机房里的人多接吅触,多发展一下人际关系。嘲讽的人应该也有,不同的人生经历,不同的价值观,不同的大学观世界观,没必要事事在意别人的目光;没事别老dāi在宿舍里,定好自己的目标,坚定地走下去。我大一的大多时光几乎都献给了算fǎ竞赛,从来没有去什么景点等玩过,无论什么课大都常常在自学算fǎ,农yào我都卸载了六七次(马上我会再卸载一次);无用功做了一大堆,坑也踩了一大堆,最后的省赛也是不尽人意的,几度万念俱灰,还好我坚持了下来。无非就证明了我不是什么bug并且逻辑思维和智商也不怎么出众。凡事有利也有弊,这些经历起码也磨砺了我的心智。大二倒是好多了,明白自己问题所在了——逻辑思维能力不够强还有就是心态比较急躁!慢慢地进行调整,差不多转变了很多!还有就是方fǎ的掌握,不断地积累和总结刷题经验!“人一我十,人百我千”!
4、其他好处:前途、福利等也就是说,通吅过算酆璁冻嘌fǎ竞赛里面的比赛,达到一定的名次后,你将获得进入某些大型公吅司鹚兢尖睁的面试的机会;如果你不想通吅过算fǎ竞赛,那么目前只有普通本科学历的你的机会会很低吧。通过算法竞赛,你将获得诸多的旅游机会,一些小省赛学校管接管送管吃,还有一些举办区域赛的大城市,往往是提前几天就过去——还可以先旅游一番;算fǎ竞赛还有很多种,比如省赛/邀请赛/区域赛、某桥杯省赛囯赛、某c举办的天梯赛、某cccc的单排赛、杭电的女生赛专场以及一些其他知名公吅司举办的算fǎ竞赛(一大堆吧),可能会有一种属于你的菜。学校有几个实验室,笔者学校的老师们招人都是从集吅训队里挖的人,或者是招退役的队员;在算法竞赛中拿几个像样的奖项,据说以后对你的研究生面试也是很有帮助的,导师们比较喜欢这类有代码基础很好的学生;并且,拿到区域赛的金牌,据说还可以名校保研。某些高校对这方面扶持力度很大,像奖学金和其他奖金都不少,加油搞吧!别把时间都浪费在游戏上,培养一门兴趣很重要,算fǎ竞赛或许就很不错!接触的越久,了解的东西就越多,自己的视野就更加开阔了!毕业以后,自己的简历上就可以多增添几笔精彩!