楼主作为一个普通二本的ICPC选手,在0基础的情况下凭借自学,获得过南昌邀请赛金牌,杭州区域赛银牌,一路上经历过不少的跌宕起伏,如今将曾经摸索出来的学习路线分享给大家
一,语言基础
学习C++语言基础语法,尝试简单循环,递归等算法的实现,学习C++STL库,了解基本用法,刷洛谷的入门,基础题,熟练运用c++进行基本的实现,夯实基础。掌握基本调试技巧。
二,算法筑基
针对洛谷上的知识点题单进行板刷,掌握动态规划,图论基础,数论基础等基础算法,如:
●双指针/滑动窗口
●DFS/BFS
●动态规划基础
●图论基础
●数论基础
一般做题难度在绿题和黄题之间,可以参加codeforces的div3,4
三,算法进阶
1,研究数据结构
掌握如下数据结构的原理,最好能手撕:
●树状数组
●线段树(最好会可持久化线段树)
2,掌握进阶算法
●各种数位DP
●网络流
●字符串基础(kmp/字典树)
3,实战训练
●CF每周都打,目标1600+,补到div2D难度的题
●VP区域赛并补到铜牌题
ACM过往的拿牌团队中,至少有一人达到1600分,到达1600后初步有冲击铜牌的水平
四,比赛冲刺
学习所有高级算法几乎是不可能的,我们要有取舍。
1,高阶算法学习
部分高阶算法可以不用全部学会,可以选择几个方向重点突破,我列举其中几个
●各种平衡树应用(Link-cut-tree,分裂,合并)
●后缀自动机以及后缀自动机相关应用(自动机上DP等)
●计算几何(旋转卡壳等,需要有一套无惧卡精度的板子)
●多项式全家桶(NTT,FFT等)
2,思维强化
●CF冲击1900(补题到div2E)
●VP正式比赛补题到银牌,自己擅长的方向补到金牌
3,战略优化
●制定团队分工和开题策略
●一起VP磨合沟通能力
在这过程中可以建立个人代码板子库,我的代码板子库:https://gitee.com/paoxiaomo/xcpc,实战可以有效提升A题速度
个人训练记录:
