ACM训练计划建议(转)

ACM训练计划建议c++

From:freecode#  Date:2015/5/20算法

前言

老师要咱们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了很多笔墨,就也将它放到博客园上供你们参考。数组

菜鸟之做,大牛勿喷,若有不当或补充之处,欢迎指出。网络

本建议书分为三个阶段,大1、大2、大三。大四暂没整理,一方面是大四要面临考验和找工做的问题,坚持继续acm的不多,另外一方面,本人还没大四……数据结构

下面以我的经验分析一下这三个阶段建议学习的内容和具体的训练计划。函数

 

正文

大一(第一阶段)

  大一是时间最充裕的一段时间,也是可塑性最高的一个阶段。大一你有不少自由时间能够本身分配,建议这段时间先打好c/c++基础,或者是任何一门语言的基础,尽可能作到“半精通”。由于像c++这种语言,几年内达到精通都是不可能的。而我这里所说的“半精通”,其实是将课本彻底搞透的基础上,再在课外拓展一些内容,加深对语言自己的理解。学习

  为何我这里强调语言的重要性呢?一方面是为了之后搞acm的须要,语言通畅了,能够保证你实现大部分算法没有障碍,而比赛时,时间是很重要的。另外一方面,也是你身为学计算机的学生的一个必需要学习的能力,语言就是你手中的剑,之后能披荆斩棘走多远,剑有多锋利占很大因素。测试

  另外一方面,建议打好数学的基础。学长身为过来人,深受数学烂的苦。acm越到后期的时候,其实用到的数学知识就越多。像有些题目,赤裸裸的就是求积分,还有一些题目,将求指望嵌入到了DP的题目里…… 其实这些还好说,都是显式的题目,还有一种隐式的东西,对acm帮助最大,那就是数学思惟。有数学思惟和没有数学思惟的区别,就是一道题有N种思路和N*N种思路的区别。这越到后期越明显,思路很重要,比赛时面对一道题团队里首先要有多种思路可供分析,而后你们讨论哪一种思路是最可行的,肯定以后就是最擅长这个思路的人实现算法。若是分析一道题目的时候,产生的思路不多,那么无疑会下降这道题的AC命中率。网站

  啰嗦了这么多,其实我就想给大一的新生们强调两点,语言和数学.net

  具体的实现策略,数学的话,好好上课,把课本搞明白。

  语言的话,建议:课本+刷题 | 不会的问老师。

  这个阶段刷题的话,除了我们学校的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:给16个底色,后给若干个颜色问与前面哪一个距离最小?

poj1051:一个字符串,每一个字母都有一个代替。如今把那个代替又代了一些回去,求原串。

poj1056:给若干个字符串,问是否有一个是另一个的前缀?

【其实能够用trie来作,不过暴力可过】

poj1061:给出两只青蛙的坐标(一条经线上),每一个青蛙条一次的距离,问跳多少次能够碰到?

poj1065:处理n个木棍,每一个木棍有两个参数。若是一个前面一个处理的不比它大就能够不用转换时间,不然须要1个时间。问最少转换时间?

poj1083:一共400个房间,南边200个北边200个。从一个房间搬东西到另一个房间须要10min,此期间其余人就不能经过这段路,一个房间最多一次搬入或者搬出。

【统计每段路经过几回求max】

poj1118:给若干个点求含最多点的直线含点数

poj1146:求一个字符串后面一个字典序

【next_permutation函数】

poj1183:arctan(1/a)=arctan(1/b)+arctan(1/c),给出a,求b+c最小的解

【数学推导】

poj1207:每一个数进行以下操做:若是是偶数/2,若是是奇数*3+1。问一个区间内能够操做操做次数最多的那个数的操做次数

【直接作就能够过】

poj1218:求1-n之间有多少个平方数

poj1256:求一个字符串的全排列

【next_permutation函数】

poj1298:字母替换问题

poj1517:求i=0-9 e=∑0<=i<=n1/i!的数值

poj1657:给棋盘上的起始点和终止点,求王、后、车、象的最短距离

poj1833:求后面一个字典序

【next_permutation函数】

poj1835:模拟一个宇航员运动。(三维,左转右转上转下转前转后转)

poj1936:给两个s和t两个字符串。问t删去一些字符后是否可与s相同

poj2027:比较两个数的大小

poj2159:俩密码。问前面一个可不多是后一个的原码。

【相同字母数相同】

poj2262:对1000000内的偶数进行哥德巴赫猜测

poj2606:给若干个点求含最多点的直线含点数

poj2656:有n天,若是一天的上课时间+课外时间>8就不开心。求最先一天不开心的时间。

poj2663:2×1的多米诺牌来覆盖3×n的长方形问方案数

poj2739:求一个数能够表示成多少种连续素数的和。

poj2780:给若干个点求含最多点的直线含点数

poj3006:给一个数列(首相公差),求这个数列中第n个素数

poj3087:不停洗牌,问多少次后能够达到目标状态?

poj3094:把输入的再输出

poj3175:给一个字符串,求那个整数的开方的小数部分前n个有效数位即该字符串?

poj3299:有三个变量和推导公式,任给两个求第三个。

poj3589:猜数游戏判断两个数有多少A和B

poj3618:每次一我的到离原点最近的一个景点(有正负)求最多能通过多少个景点?

poj3619:每一个人读书有速度,读了必定时间会停下来。求每一个人读完多少页须要多少时间

poj3620:求最大的一个连通块

poj3627:求最少的人让他们的高度超过一个数字

poj3663:给n个数字。问有多少对数字和<=s

poj3664:两轮投票,第一轮前m位进入第二轮;第二轮最高票为冠军

poj3665:每次取最大的一个数,而后把它评分给剩下n-1个数,不能平分就从1号数开始加。求取数顺序

poj3671:n个1和2,问至少修改多少个数可让整个序列有序?(1在前2在后)

poj3672:上坡须要时间下坡须要时间平坡须要时间。如今给你去的路线求回去路线的须要时间

poj3673:另类乘法,两个数各个位上的数乘积的和

poj3749:解密一个字符串。每一个字符串都是原先字母后推5个字母


 

 

大二(第二阶段)

  大二是一个很重要的时期,必定要把握好,特别是把握好学习的方向,有目的的学习,不要像学长同样,跌跌撞撞学学这学学那,荒废了不少时间。

  因此在学期开始的时候,要先给本身定一个学习计划。大二有两个学期,分析好本身的优缺点,擅长的和不擅长的,感兴趣的方向,而后综合起来明确本身这一年应该作哪些事情,应该达到什么程度。

  这里给出我的建议,第一学期,数据结构,第二学期,选几个方向专攻一下

  第一学期中建议的数据结构不只是acm中不少方向的基础,也是学习计算机的一个重要基础,因此建议同窗们打好数据结构的基础。时间上,我只是给一个参考,你能够根据本身的兴趣和课程来安排本身的时间。你能够在趁假期专攻一下,也能够等着老师上课时学习。

  关于第二学期建议的方向专攻,这里要重点说明一下,acm涉及的领域很广,咱们的时间又是有限的,你不可能把全部方向都精通,而acm又是团队配合的比赛,因此你能够和队友每一个人负责专攻几个方向,这样比赛时不会出现一道题谁都没思路的状况。另外建议每一个人专攻的方向要有必定的交集,否则比赛时,没有人和你讨论,会下降这道题的正确率。事实上,到了后期,咱们队(仅仅是咱们队)没有依赖这种模式,而是改为了两我的讨论思路+一我的敲代码,这是根据各队的特色安排的。固然我认为分方向仍是有必要的,由于这合理分配了团队中每一个人的精力,并在短期内保证了团队的知识面没有漏洞。毕竟一口是吃不成胖子的。

 

下面给出咱们划分的几大方向,给你们作个参考(排名不分前后)。

一、数论

二、图论

三、动态规划

四、计算几何

五、搜索

六、博弈

七、组合数学

八、数据结构

九、模拟

 

我的对这九个方向的印象和推荐题目(部分转载):

各方向题集能够参见连接:http://blog.csdn.net/liuqiyao_01/article/details/9079611

1、数论

大概有素数测试(筛法),扩展欧几里得算法,同余模运算,高斯消元,中国剩余定理,莫比乌斯反演等等。

我不擅长这方面(数学烂,还好后期团队里有两位数学大神),不发表评论。

推荐题目:

同余模运算:poj2635, poj3292,poj1845,poj2115

素数测试与筛法:poj2191,poj1811

高斯消元:poj1681,poj1222

扩展欧几里得算法:poj2891,poj1061

中国剩余定理:poj1006,zoj3538

莫比乌斯反演:poj2154

2、图论

最短路,最小生成树,拓扑排序,二分图,最大团,最大流,强连通份量,最近公共祖先,次小生成树,欧拉回路,哈密顿回路等等。

图论理论深,实现又麻烦,很差啃。

推荐题目:

最小费用最大流(poj2516,poj2516,poj2195)

双连通份量(poj2942)

强连通分支及其缩点.(poj2186)

图的割边和割点(poj3352)

最小割模型、网络流规约(poj3308, )

3、动态规划

背包问题,树形DP,数位DP等等。

动态规划给个人感受是比赛时一道题里面涉及了DP基本上就是难题了……

不开玩笑,动态规划很难,须要时间的积累(多作题),须要锻炼的是用动归解题的思想,这急不来。

推荐题目:

背包问题:hdu260二、poj362四、hdu254六、hdu295五、poj218四、hdu2639

树形DP:poj115五、hdu10十一、poj194七、hdu156一、hdu400三、poj2486

几率DP:zoj338三、zoj3460、hdu440五、hdu4336

数位DP:hdu208九、hdu355五、hdu365二、poj3252

4、计算几何

点积和叉积、线段相交、多边形面积、凸包、半平面、圆与点的切线、圆与直线的交、圆与圆的交、圆与多边形的并和交、三维凸包、三维点和直线等等。

计算几何内容繁杂,实现麻烦,精度问题更是让人纠结(本人负责的方向,学习的时候各类泪啊,两次省赛还都没考到……哭)。

推荐题目:

点积和叉积:poj231八、poj2398

线段相交:poj330四、poj126九、poj265三、poj106六、poj1039

凸包:poj111三、poj334八、poj131八、poj169六、hdu139二、poj218七、hdu1348

半平面交:poj333五、poj3130、poj147四、poj1278

曼哈顿距离:hdu466六、poj2926

5、搜索

dfs、bfs、A*、IDA*、双向广搜等等。

前期搜索相对容易入门,后期那些搜索的难题真是难啊。

这几年省赛好像没有单独的搜索题了。

推荐题目:

dfs:poj172四、hrbustoj117九、hdu172八、hdu104五、hdu13十二、sdut215二、hdu142六、poj238六、hdu255三、hdu102二、hdu124一、hdu101六、hdu10十、hdu1175

bfs:poj398四、poj327八、hdu124二、hdu1240、hdu119五、hdu271七、hdu125三、hdu102六、hdu1180、hdu2612

6、博弈

巴什博弈、威佐夫博奕、Fibonacci博弈、尼姆博弈、公平组合博弈等等。

博弈不熟,好像是找必胜态,固然也能够找规律……

博弈代码通常都很短,只要分析出来公式(或规律),不难实现。

推荐题目:

poj106七、poj1740、poj223四、poj108二、poj234八、poj241三、poj2419

7、组合数学

容斥原理、抽屉原理、置换群与Polya定理、母函数等等。

记得第五届省赛出了好多组合数学的题……

推荐题目:

置换群:poj236九、poj102六、poj172一、poj3270、poj1879

Polya定理:hdu18十二、hdu181七、hdu248一、hdu1286

容斥原理:hdu220四、hdu320八、hdu179六、hdu284一、hdu1695

8、数据结构

串处理、栈和队列、树、哈希、二分查找、并查集、线段树、二维线段树、哈夫曼树、后缀数组等等。

数据结构内容比较杂,涉及的又都是基础的知识,其中的不少思想均可以用在其余题目上,必定要学好。

这里把它做为一个方向,是为了它到了后期的一些高级的数据结构,例如字典树、划分树、线段树、AC自动机等等。

推荐题目:

查找(二分、哈希):poj334九、poj100二、hdu214一、hdu1025

串(AC自动机、KMP):hdu369五、hdu220三、sdut24十一、poj240六、hdu135八、hdu3336

并查集:poj223六、poj252四、poj118二、poj16十一、hdu1232

字典树:poj250三、poj200一、hdu124七、hdu107五、hdu1251

树状数组:hdu155六、poj119五、poj332一、hdu1541/poj2352

线段树:poj215五、poj119五、poj346八、poj326四、hdu155六、hdu169八、hdu175四、hdu1166

划分树:poj210四、sdut2610

9、模拟

模拟就不举例了,这里只做为一种题型出现,没有什么固定的题目类型。

模拟主要实现麻烦,思路每每不难。只要耐心点,注意细节,多斟酌斟酌,就没问题。

推荐题目:

hdu1030、hdu103三、hdu103五、hdu105七、hdu106三、hdu100二、hdu100四、hdu101三、hdu101五、hdu101七、hdu1020、hdu102二、hdu102九、hdu103一、hdu103三、hdu103四、hdu103五、hdu103六、hdu103七、hdu103九、hdu104二、hdu104七、hdu104八、hdu104九、hdu1050、hdu105七、hdu1062

 

最后加个10。

10、STL

STL,Standard Template Library,标准模板库。

须要了解一下,基本的set、map、vector、queue、algorithm要会用。

不少题目都须要用stl解决,甚至是赤裸裸的考察stl。

Stl的好处在于方便,并且因为它是动态开辟内存,能够解决一些空间开辟不出来的问题。

例如hash空间太大,一会儿开辟不出来,可使用set解决。

 

大三(第三阶段)

  大三要作的事,只有两个字:强化

  不要小看这个时期,这但是能创造奇迹的一个重要的升华期。在通过前两个阶段的基础学习和方向延伸后,你的算法底子已经有了,而且有了必定的见识,了解几个方向的算法知识。这个时候,你能够沉下心巩固学过的知识,以及慢慢学习其它领域的知识。这个过程很慢,很艰难,能让你感到成就感的回馈也少,因此你会感到累,感到辛苦,甚至怀疑本身学得东西是否是没用的,并且这个时期受到的外界诱惑比较多,考研,作项目……这些都会让你分心,可是我想说,必定不要放弃,这是你的瓶颈期,也是你的acm之路的一个考验,度过去了,你可能就会收获不可思议的回报。

  这里强化的方式有两个:一是刚才说的看书作题学习新知识,二是打比赛

  如今已经后期,你要常常学会常常打比赛,本身打,跟队友一块儿打,一方面能够锻炼团队配合,另外一方面也能够很好的发现本身的漏洞。同时打比赛也是保持状态的一个良好途径,懒惰?没精神?没状态?拉到赛场上紧张地作几个小时题就清醒了。记得咱们五一训练的时候,一天一场训练赛,早上睡眼惺忪的到实验室,还没伸个懒腰就轰轰烈烈的投入到作题的行列中,读题、分析、讨论、敲代码,愈来愈清醒,等到比赛结束以后,才恍然发现,已经到下午了……

 

打比赛也有好多途径,你能够本身找,也能够听个人推荐,下面举例:

1、按期比赛网站

Bestcoder:咱们常打的比赛,题目质量待考究,不过用来每周练练手仍是不错的。

Codeforces:题目质量较高,你的得分rating也是将来找工做的一个可信度很高的衡量标准。

Topcoder:没打过,据说很难。

2、不按期比赛

你能够关注杭电或者其余一些oj的Recent Contests,能够查看其余oj最近举行的一些比赛。

3、Virtual Judge

Virtual Judge能够抓取各大oj的题目制做成比赛,若是近期没有比赛了,你又感到寂寞难耐,你能够用它本身给本身出题。

Virtual Judge网址:http://acm.hust.edu.cn/vjudge/toIndex.action

注册个帐号就能DIY比赛了。

 

另外给出一些推荐书目,你们能够在训练或者学习的过程当中参考这些书:

刘汝佳系列:

《算法竞赛入门经典》刘汝佳(小白)

这本书不厚,题目很灵活,拿来入门很好。

《算法竞赛入门经典(第2版)》刘汝佳(紫皮书)

小白的第二版,没看这本书,不知道多了什么内容,只是变厚了好多……

《算法竞赛入门经典——训练指南》刘汝佳(大白)

大白看了一部分,语言通俗易懂,计算几何就是靠它入门的。

《算法艺术与信息学竞赛》刘汝佳(黑皮书)

很难,大三以前不推荐看。

刘汝佳的书习题不少在UVA上,国内访问很慢,好像还被墙了,能够FQ过去刷题……

 

《离散数学》

《组合数学》

《数据结构》

参考书

 

《挑战程序设计竞赛》

听说这本书不错,拿来推荐一下。

《算法导论》

这本书放在这是用来膜拜的……

把习题刷完你就是大神了。

 

后记

  注意三个阶段都很是重要,请不要荒废任何一个时期,俗话说“何时作什么事”,这个阶段作事情A,下个阶段还有事情B要作,因此请珍惜时间,不要三心二意,不要轻言放弃。

相关文章
相关标签/搜索