码迷,mamicode.com
首页 > 其他好文 > 详细

重开吐槽有感及OI书籍题库推荐 -自己选的路 跪着也要走完

时间:2016-03-06 17:36:49      阅读:3451      评论:0      收藏:0      [点我收藏+]

标签:

  凉爽的清风伴随着烈日洒向这片土地,山区的夏天似乎早已来到。回想过去的高一上学期与寒假,不禁叹息,荒废了多少时光。虽然自称为OIer,但却是个半吊子,在过去的NOIP2015中,从零开始的我,刚上完三四节课的我就裸考了笔试,差0.5分与复赛失之交臂。再见了2015的比赛,考试过后,感觉OI没什么用处,有荒废了许多,竞赛班由次居然连续3个星期都没开过课,也就是1月1课。可能是不重视吧,在2015noip中,我校复赛才入几个人,学长得了奖,最高的也还是省二。应该算是弱校了吧。不由地怀疑自己。

  OI课上教的是Pascal,虽然学完了语言,但是没有多少办法来刷题,算法也没学,自学也没有方向。碰巧手边有本刘汝佳的《算法竞赛入门经典》,寻思好久决定自己换语言重新开始,希望老师别怪我,希望自己能好好学,记得昨天课上就少了一个同学,不知道人数最后会有多少。

     实力有限 题解可参照下面神犇Blog看, 自信写Blog,反正书写是为了更好地思考,就献丑了。

最后来点小干货吧,可能大家早已熟知于,让我凑点字数好吧。

 书籍推荐 《算法竞赛入门经典》(第二版) 《算法导论》 《算法竞赛入门经典——训练指南》《C++ Primer 5th》 (个人觉得必备)

              《算法艺术和信息学竞赛》《新编实用算法》(据说高难度) 《信息学奥赛一本通》《挑战程序设计竞赛》(他人推荐)

             《The Art of Computer Programming》 《C++ Template Metaprograming》(大雾~烧钱)

题库 BZOJ(权限号) Codevs USACO 这三个还是个人觉得最赞的  

                            http://acm.hust.edu.cn/vjudge/toIndex.action 各类题库汇总

                            https://www.codechef.com/

 比赛                       http://codeforces.com/   

                              http://uoj.ac/   

                              http://contesthunter.org:8080/

编译工具 noip吧精品区 OIpacks 安装

必读        http://www.nocow.cn/index.php/RP%E5%AF%BC%E8%AE%BA RP导论

             

神犇Blog http://hzwer.com/ 黄学长 

             http://jiruyi910387714.is-programmer.com/       jiry

             http://wjmzbmr.com/     WJMZBMER

              http://vfleaking.blog.163.com/ VFLKING 膜拜 ETC.

   VZCH  http://www.cnblogs.com/geniusvczh/archive/2013/03/24/2978575.html 

             http://cppblog.com/vczh

             http://www.nocow.cn/index.php/%E9%A6%96%E9%A1%B5  NOCOW

     个人推荐书籍     《暗时间》《把英语用起来》《和时间做朋友》 etc.

      通向世界的工具    Latern SoftEther V*N

前辈教导 侵权删

需要学的知识:40%来自于书本、40%来自于做题、20%来自于网上其它的资料(至少我是这样)

我的OI技巧:

1、学会总结,我基本上每学完一个章节的东西就会拿多一段时间来进行总结。总结的时候,先列出一个目录,把这一节学到的知识点写进去。然后在下面分别拓展出这个知识点的原理、用途、编程流程、关键代码、优化、和其它同类算法的比较、复杂度估计、模块化代码、相应习题等等。这样,可以很容易的把一个一个的知识点串在一起记住它。(附录里有我的总结样例)

2、要拿出一定的时间看书,书是人类进步的阶梯。相信很多OIer都很喜欢做题,忽略了看书这个重要的环节。其实只有阅览群书,才能学到更多的知识。例如,某个算法你会N^3的算法,但是某本书上用N^2,甚至N的复杂度就给解决了。如果不看书,如果考试正好出这个知识点,或许你就只能拿部分分了。

3、合理安排时间(特指放假或集训的时候)。清晨7点到9点这段时间,是人们头脑最清醒的时间,这个时间段内,尽量不要去调程序,可以去做一些其它的事情,比如看书、总结等等。而9点之后这段时间,建议去做题,这个时候一般花一个小时就可以编出在其它时间要花一个半小时才能编出的程序。到了中午,吃完饭一定要睡觉,否则下午会很没精神,效率会很低的。下午呢,一般就比较综合了,比较随意了,可以自己安排。晚上,我一般都是继续调程序,因为想不出晚上干什么会高效一些。

4、学会适当的休息,不要长时间干同一件事情。当你编程序进入了一个死角的时候,或许思维会很混乱,总想找出错误或优化这个算法,但是一片空白,很盲目。这个时候,你真的需要休息。去外面小小的溜达一圈,看一看窗外的风景,这样就可以换一个心情,换一个思维。在你休息完之后,你会发现,刚才你之所以找不出错误,是因为身在此山中。

5、养成编代码的良好习惯,这个各位可以参考其它大牛的程序。我的程序一般都是用过程堆起来的,每个程序必有的Init和Main过程,可能Init里只有个read(n),但是为了保持程序美观,完整个人的习惯,还是单写了一个过程。但是不要大量的调用过程,比如在某个3重循环里调用过程,因为调过程也是需要一定时间的。除了这个,我还在每个过程中间添加了一个分割线,以便阅读。还有,各位还需要注意换行、空格等问题,养成良好的习惯,尽量使其美观,方便阅读(附录里有代码样例)。

6、学会心理暗示。这个也是很重要的,当你做不出某个题的时候,一定不要乱,心理默默的暗示自己,既然自己不会,别人做起来一定也不会舒服。当你做出某个题,一定不要盲目的高兴,要把自己的思维控制住,这样才能用形象的思维去做下一个题,所以我们一定要暗示自己,这个题自己会做,别人做起来也会很容易的,不能骄傲。

7、学会抗干扰,干扰有很多类,大概就是人为、自然因素。人为因素,当别人早早的做完题或者别人在说话、讨论的时候,一定要控制住自己,不要慌乱,否则你可能会编的程序最后得个0分,所以一定要在众多次干扰中,积累抗干扰的经验。自然因素,当太阳直射你的时候、当寒风呼啸你的时候、当键盘生硬难敲的时候、当屏幕反光的时候,你一定要学会去适应,因为很多时候在考场上会出现这样或者那样的问题,给你的只有3个小时,没有多余的时间去考虑这些无关的问题,只能适应。综上所述,抗干扰很重要,即使没有干扰,我们也可以为自己去制造干扰。

8、写程序的流程要合理安排,这个很重要,也是非常重要的。我就把自己是怎样做的写出来吧,可能不是太好,只是一个借鉴。1)我会用大概5分钟左右去完整的阅读题目,因为多一点时间阅读题目,总会有意想不到的发现。2)用10-15分钟的时间去设计算法,要尽量躲避第一印象思路,因为这个思路往往是错的,设计算法不仅要证明这个算法的正确性,还要从时间、空间等因素来考虑是否,千万不要很草率的结束这个过程,因为当编完程序再来改正错误的算法,往往会浪费更多的时间,例如说高一的我,看见题就想做,大概理出了思路就去编程,但是反过头来发现,其实是错的,结果浪费了时间不说,心情还很不好。3)利用5分钟的时间写出程序的框架,第一步该干什么,第二步又该干什么,一步一步的写出来,再对每一步进行一些拓展,写出关键的伪代码等等。这样,才能让自己在编程的时候条理性清晰,才能降低出错的几率。4)编程10-20分钟,前面的工作都做好了,这个过程应该是非常容易的,注意不要犯打错变量等低级错误就行了。5)查错10-20分钟,往往第一次编出的程序都是错的,具体的查错技巧下面会写出来。这样,一个程序就算写完了,我这个算法流程只是提供一个参考,具体每个流程的时间大家可以看情况去安排,一般简单程序30分钟敲完,中等点的50分钟,难点的1个小时左右。这样才可以更上NOIP3个小时的节奏。

9、静态查错。这个是很重要的,也可以说是非常重要的。何谓静态查错,就是编完代码之后,不去干其它事情,只是安静的从头到尾的把自己的代码阅读一遍,比如说普通的编译错误、变量是不是打错了、数组开的够不够大、程序的逻辑性是不是还存在问题等等。这个时候,一般是很容易发现错误的,并且还会有一种成就感。但是如果你编完之后去测样例,可能样例是过了(因为样例是很弱的数据),但是其实程序仍漏洞百出,或者测样例都错了,这个时候会严重影响你的心情,再去查错的话,事倍功半。

10、出测试数据是个大学问。测试数据一般分为,小数据、大数据、极限数据等等。所以我们一定要从这几个方面,各出几组测试数据。小数据可以手算,很容易出结果,相信是OIer最喜欢的。极限数据也是指那些边缘数据,比如说某个数据导致你数组越界、被0除等等,一般很多题目都存在一两组这样的数据。大数据的话,一般是去检验程序是否超时间和超空间,因为结果是否正确,真的很难手算出来,除非很离谱的错误。

11、检验程序的正确性,这个除了设计算法时的证明外,如果有时间允许,我们还可以写一个效率低但是绝对正确的算法来和原程序进行对比。这样,我们利用上面出测试数据的学问,加上这个手段,一般可以80%的判断出你写的这个程序是否正确,进而不断完善。(还有一个小技巧,就是利用.bat文件,判断两个输出是否等价。具体怎么用,可以看附录)

12、善于交流,这个就不知道怎么说了,就是多和其它人交流。

其它:1)培养对OI的兴趣。2)胜不骄,败不馁。3)不抛弃,才有希望;不放弃,才能成功。4)天才是99%的汗水+1%的灵感,对学OI尤其适用。5)学完某个算法时,尽量把模块化代码保存下来。6)如果NOIP一等奖名额只有1个,那么相信自己就是那一个。7)制定好目标,分为远大的目标(上哪个大学),中期的目标(拿一等、冲省队、夺金牌),近期的目标(学会哪个算法、模拟赛要达到多少分)。8)赛前一周多复习,多做简单题,不要再去钻高难度的题,这是NOIP不是NOI。9)专心致志,学习时就不上QQ,不上论坛。10)细心,细心,再细心。

希望各位OIer以后回想起自己的OI时光,不要为自己留下遗憾。       

         第一次写 排版很乱 内容有错见谅

 

               

 

重开吐槽有感及OI书籍题库推荐 -自己选的路 跪着也要走完

标签:

原文地址:http://www.cnblogs.com/FVAZ/p/5247686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!