ACM新手入门历程

来源:互联网 发布:网络报警电话是多少 编辑:程序博客网 时间:2024/04/29 19:55

首先,我做个自我介绍,大一即将转入大二acm业余狗,入队七个月零25天。普通二本院校,外号皂兄。  

我是偶然兴趣入了这条道儿的,刚开始只想着学学C,心里盘算着一来消磨消磨时光,二来既然选的专业属于信息类,反正都要学,何尝不先试试水,没学成,那也没事;学成了一点半点,那装装B也还是可以的。  

我自己看视频敲简单程序掌握C大概用了一个多月,后来学校的师兄(我们都这样叫他,其实他是学校的老师,备注:坑货的大神)声称学校ACM集训队招新人,我忍不住煽动,就去了。  

因为是我负责晚自习的请假,所以我很清楚的记得,我正式入队学习的时间是在2015年11月17日,从这个日子算到今天2016年7月12日,也将近八个月了。当时我们的水平什么样的呢————零基础(从来都不知道可以用C语言在网上刷题),现在的水平呢————马马虎虎啦(我不细说,本人水深水浅博客文章一目了然)。  

好了,前面废话了老长的三段,对不住大家了(主要是缅怀一下我这一路的历程),接下来我们进入正题。或许在三四个月之后,就又会有一批新鲜血液接触ACM,如果我写的这篇文章能有幸给你带来什么启发和动力,皂兄便非常满足了。  

假设,你是一个刚会C语言基础,从来没有接触刷题的人,但是面前摆着校训队招新的诱惑,你抵挡不住,前去试水,所幸被看重(其实acm跟C语言的牵连关系小到百分之零点几,一般学到后来都会选择C++语言实现,因为C++输入输出简单方便,而且有个功能强大的STL)。  

不是我说打击的话,学会了C语言基础并不代表会C语言编程。你需要不断练习,一回生二回熟,通过题量来累积对选择循环数组结构体函数等等的熟练运用。其次,了解一些编程的核心,其实,编程就是把现实中的问题通过C或者其他语言告诉电脑,让电脑解答。具体来说,既然走了acm这条路,要起步就先习HDUacm入门PPT。会基本输入输出之后开始在hduoj上刷题,先刷11页的那一百道。  

如果要问我每天花三个小时,要多久就可以入门之类的问题,我真的不好说,只是你每天除了上课自习吃饭睡觉,其余时间你都用在这上面的话,就算基础脑袋再怎么不够用,一个月到两个月足矣。  

这一百道题是acm入门的必经之路,可叹你们皂兄因为懒,刷了近乎四个月。接下来就开始着手入门的学习了。这个不用我多说,随便百度网上一大把,先买小白跟大白(也就是一本经典一本训练指南)。先沉下心来,看看那本红皮书,从第一章开始看,等你看到C++的时候,你就需要一本关于C++的书开始着手自学C++了(个人建议:C++必须要学,而且最好趁早学,因为慢慢地到后来就要自学数据结构跟STL了)。  

学会C++之后就跳过红皮书中间部分,先学数学那块,什么筛选法、唯一分解定理、欧拉函数、线性方程组、中国剩余定理、组合、递推数列、概率什么的都先打好基础,没完全搞懂没关系,但是不能忘了你哪部分没搞懂,随着学习的渐渐深入,你需要适当地回过头来总结,把学过但是没学精的知识再仔细学一遍。  

按照我的路子,学了数学那部分之后我就开始让自己的大脑先停歇一会儿,开始学习字符串、模拟题的内容,比如说大数、进制转换的问题,然后学习排序,暴力,了解一些递推公式等等打好基础准备。之后便可以在网上开始看看各位大牛的博客,为将来的算法学习做准备。建议可以从hdu跳槽,到POJ或者是FZU、ZOJ等等上面去做题。这个时候,给你的题目就可几乎是英文题了,所以皂兄建议,时刻不忘学英语,不为四级也还是要为acm读题。  

基础打牢之后就开始对算法采用逐个击破的的方式。我记得我是从今年四月份开始的,学习dp,水了一些题目,看了些书跟博客,觉得必须要中断一下了(因为水太深)。但是,我发现过早地学习dp对自己并没有坏处,接下来我就开始学习图论跟树,由于我在寒假的时候闲来无事就自学了点数据结构、图论和离散,因此后来入手也算顺利。  

师兄这个学期给我们搞了几场比赛,我们在这个学期开学的时候就组好队了,看到我们队的比赛成绩从最底层一场一场地往上爬,自己内心感触颇多。给自己最大的教训就是没学搜索,所以到目前为止,我就决定再潜一波水,对算法再深入学习。  

个人吐槽,这个坑,跳进去了在一两年之内就很难爬出来了。

0 0