ACM训练计划建议
From:freecode# Date:2015/5/20
前言:
老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考。
菜鸟之作,大牛勿喷,如有不当或补充之处,欢迎指出。
本建议书分为三个阶段,大一、大二、大三。大四暂没整理,一方面是大四要面临考验和找工作的问题,坚持继续acm的很少,另一方面,本人还没大四……
下面以个人经验分析一下这三个阶段建议学习的内容和具体的训练计划。
正文:
大一(第一阶段):
大一是时间最充裕的一段时间,也是可塑性最高的一个阶段。大一你有很多自由时间可以自己分配,建议这段时间先打好c/c++基础,或者是任何一门语言的基础,尽量做到“半精通”。因为像c++这种语言,几年内达到精通都是不可能的。而我这里所说的“半精通”,实际上是将课本完全搞透的基础上,再在课外拓展一些内容,加深对语言本身的理解。
为什么我这里强调语言的重要性呢?一方面是为了以后搞acm的需要,语言通畅了,可以保证你实现大部分算法没有障碍,而比赛时,时间是很重要的。另一方面,也是你身为学计算机的学生的一个必须要学习的能力,语言就是你手中的剑,以后能披荆斩棘走多远,剑有多锋利占很大因素。
另一方面,建议打好数学的基础。学长身为过来人,深受数学烂的苦。acm越到后期的时候,其实用到的数学知识就越多。像有些题目,赤裸裸的就是求积分,还有一些题目,将求期望嵌入到了DP的题目里…… 其实这些还好说,都是显式的题目,还有一种隐式的东西,对acm帮助最大,那就是数学思维。有数学思维和没有数学思维的区别,就是一道题有N种思路和N*N种思路的区别。这越到后期越明显,思路很重要,比赛时面对一道题团队里首先要有多种思路可供分析,然后大家讨论哪种思路是最可行的,确定之后就是最擅长这个思路的人实现算法。如果分析一道题目的时候,产生的思路很少,那么无疑会降低这道题的AC命中率。
啰嗦了这么多,其实我就想给大一的新生们强调两点,语言和数学。
具体的实现策略,数学的话,好好上课,把课本搞明白。
语言的话,建议:课本+刷题 | 不会的问老师。
这个阶段刷题的话,除了咱们学校的oj,还可以到各大oj刷题,poj上的水题比较多,而且质量较高,这里贴出一个poj水题的列表(转)。
poj1000:A+B problem
poj1002:电话上按键对应着数字。现在给n个电话,求排序。相同的归一类
poj1003:求最小的n让1+1/2+1/3+...+1/n大于给的一个实数
poj1004:求一堆实数的平均数
poj1005:由坐标 (0,0) 开始,以半圆为形状每年侵蚀50m^2,问(0,0)开始到(x,y)结束需要多长时间
poj1006:三个周期是常数。现在给三个周期出现高峰的时候,问下一次出现高峰是什么时候
poj1007:求字符串排序
poj1008:一种日历,计算日期数量
poj1012:Joseph问题
poj1013:给3次称硬币的结果问哪个是假币且假币比真币轻还是重
poj1016:一个数串这样变化:它的后继是:它含有几个1,含有几个2...问循环情况
poj1017:1×1,2×2,3×3,4×4,5×5,6×6的产品放到6×6×h的盒子里。求h最小值。
poj1028:模拟网页浏览
poj1031:求一个点是否在凸包里面
poj1032:把n分成若干个不同的数的和,求最大乘积
【2+3+...如果多出来就从最大一个数开始加1】
poj1045:数学公式
poj1046&#