在开始之前先摘写一句话:二进制是世界上最好的语言

总的来说,这次的集训的收获非常大。首先认识了一些集训队里非常厉害的学长学姐和一起参加集训的队友。只有身边都是优秀的人才会促使自己变的优秀。

集训前已经学习的算法:枚举->递归->二分算法->分治->dp->dfs->bfs->贪心

这个假期的学习路线(感谢lxz学长和hlq学姐拉的专题):基础dp练习(一点都不基础。。。)->线段树->KMP&拓展KMP&Manacher->字典树&AC自动机(这可不是写了就能自动帮你AC的)->状压dp->数位dp->区间dp->二分图匹配->强连通。(自己额外还学了并查集, 所有的STL容器的用法, 各种快速幂,数组离散化,还有题目中的各种模板,结论)

我觉得这个暑假我收获最大的是:学会了自学。开始感觉特别的难,不知道别人的博客都在写什么(有的博客的确写的很不好理解),后来找到一些好的博客就慢慢的沿着别人的思路,自己在纸上一步一步的推导。就看懂了别人的代码。自己再按思路写一个模板出来。就会感觉原来如此。基本上,做几道模板题就开下一个算法专题了,所以专题上拉的题都没有怎么做。导致对相应算法的理解不深,这个有时间了,一定要全部重新刷过,而且每补一道题,如果遇到一些新颖的思维或是不知道的结论一定要写博客,就当是错题集,如果以后遇到类似的问题,就可以用相应的结论和思维。

集训结束后,我感觉还有好多的算法没有学。而且又感觉组合数学和数论在杭电多校里经常出现,我就准备去把莫比乌斯反演学了,然后莫比乌斯反演中涉及欧拉函数了。又去学习欧拉函数,然后欧拉函数中涉及线性筛了,又去学习了线性筛,然后线性筛中遇到了他的兄弟杜教筛,洲阁筛而且线性筛中涉及积性函数了。嗯,先学积性函数吧。。。。。。。。。等我学完这些, 我又迷茫了,因为没有学习的算法实在太多了。也不知道该从哪开始,而且常出题的是哪些算法,毕竟区域赛又在11月。。。。。想先把常用的学了,多刷题熟练掌握这些模板的各种变形。

正好,程老师前几天开了个暑假集训的总结会,cds学长给我们接下来的学习指明了方向。(感谢cds学长超细心的给我们总结学习路线)

入门算法:
①STL容器(https://blog.csdn.net/jaihk662/article/category/6356347/1 往下翻,queue,stack,string,vector,map等)这个可能因为太重要了当时我忘说了,理论上这个是一切算法的前提
②线段树
③kmp(字符串处理基础问题,这个要多刷找感觉)
④基础动态规划
⑤贪心,模拟,C语言基础题(codeforces div2 AB题)
⑥最小生成树、最短路、并查集

理论上只要会上面的,熟练一点稳一点就铜了(cds学长说的熟练一点可能是指:每个算法最少训练100道???,稳一点可能是指:遇到相应算法的题一定要AC???)

基础算法:

①较难的DP(区间DP,滚动数组优化,斜率DP,简单的状压)

②各种位运算(异或,或,且,左移右移以及他们的性质,特别是异或!)

③二分匹配

④基础数论(质数筛、一些简单的概率计算,高中之前的数学定理)

⑤计算几何(向量叉积,计算多边形面积等,判断两直线相交、圆)

⑥树(DFS序、LCA等)

⑦强联通分量(这个很重要,有向图基础)

⑧字典树、manacher

掌握这些之后,基本上就稳了,接下来就是刷题,找到感觉,积累经验,说不准运气好就是银牌了(cds学长说的运气好可能是指:比赛中的题,都是你做过的题的变形???)

进阶:
①网络流(最大流、最小费用最大流)
②线性代数(只需要掌握矩阵求秩、矩阵乘法,难点主要在如果将问题转化成矩阵乘法!)
③中等数论(欧拉降幂、欧拉函数、费马小定理、Lucas、中国剩余定理)
④组合数学(小球与盒子系列https://blog.csdn.net/Jaihk662/article/details/79572685、各种这类型的计数问题)
⑤后缀数组、AC自动机、fail树
⑥树的各种问题(树链剖分、树分治等)
⑦分治、分块、莫队(CDQ分治、一些神一般的套路)
⑧可持久化线段树

应该是有漏的,比如BFS、DFS,这个你们在学习过程中肯定都能知道的

进阶算法可以慢慢学(半个月一个啥的)不急,主要是基础,不知道这些全部都熟练能有多强,你都搞定CF应该已经紫名了吧(CF:codeforces)

难:

①有限制的网络流(最小费用可行流、带上下界的网络流、zkw、分层)

②高等数论(FFT、NTT、母函数、莫比乌斯反演、Min_25筛、Polay定理等)

③舞蹈链

④高难度集合(半平面交、***向量空间)

⑤随机(模拟退火等)

⑥可持久化平衡树

⑦快速沃尔什FWT、各种论文题

⑧散了吧。。。。

可以偷偷学一个,用来创造奇迹

当然cds学长也给我们说了很多比赛的小技巧(但我感觉这次比赛出现了,以后再也不会出现了)和一些很好的刷题方法。

遇到一些实在不会的题就先放一放,说明自己的水平还达不到这个题的水平,(有的题,就算让你看题解,你要看懂可能要几小时,几天,甚至更久)

学习算法主要以线段树, kmp, dfs, bfs, 最短路, 最小生成树为基础再向外扩展。

STL, 位运算,逆元,线段树是竞赛的“加减乘除”,也就是基础中的基础,并且是竞赛中最常用到的东西。

ACM没有考察范围,一切的科学到尽头都是数学,上面的很多数学知识就算是数学专业的也要上研究生才学,而且题目经常涉及组合数学,数论,博弈论。。。。,上次在多校群里看到一位大佬说:我队友说这道题有结论,他之前在《具体数学》哪一章看见过

我:具体数学???

记忆最深的还是cds学长说快速傅里叶变换,说自己现在都还不会(我感觉他可能会一点),基本上省内的ACMer应该没有会的(毕竟就一个傅里叶变换就撑起了整个通信业)

按百度上的说法ACM程序设计大赛是“大学级别最高脑力竞赛”。

说上面这些话既是自勉,也是为后来者指明道路,让你们明白这条路很苦。很累。但也很充实。Codeforces比赛经常在0点左右,我和NYX,DYW,CRZ经常拿着电脑去自习室打,一起上分(经常掉分),两点钟打完再回去,舍友已经睡熟了。轻手轻脚的上床,睡觉。玩ACM可以让你认识一群跟你一样有梦想的人,一起学习,打比赛。

还有希望cds, zy, ykc学长他们今年能够在icpc拿金,也是省内首金。毕竟他们在上次省赛拿了第一名,实力肯定是有的。 而且他们打完这场icpc也要退役了。

15的学长退役后,明年就该我们和16级的学长学姐打现场赛的名额了。

一起加油吧!