WanderOvO的算法学习经验分享
自我介绍
聊城一中 2015 级奥赛班学生,王建明老师的学生,2018 年高考考入北航。
计算机本硕,中间 gap 参与教育部教育考试院国家题库建设,目前研二,研究深度学习框架测试。
算法竞赛爱好者,各大 OJ 常用用户名 WanderOvO。
我自己的算法学习经历以及拿的奖项
给入门旁听的一句话:算法竞赛的学习轨迹因人而异,起步晚不等于没机会;差距往往来自是否热爱、训练节奏(是否持续有反馈)与是否在正确阶段做正确的事。
2018 年:大一,学不会 C 语言,上机考试 10 题过了 5 题,最后期末 79 分。
2019 年:学习基础的数据结构,只会对着书和课件上的代码抄,但比 C 语言时期强一些。
2020 年:正式开始学习算法竞赛的内容,用 2 个月时间粗略过了一遍 S 组以内一多半的考点,但是有点揠苗助长,每个知识点只会做模板题,洛谷黄题都做不出来。暑假尝试跟校队集训,但打不过遍地 NOIP 省一、NOI 银牌铜牌的同学,训练稳定倒数第二左右,未进入校队,此后打消了参与 XCPC 的念头。
2021 年:学业繁忙,没有太多时间学习。
2022 年,保研后报名了 AcWing 课程并刷完,知识水平得到了巩固,思维能力几乎没有增长,没有解决掉**“拿到一个问题后怎么想”**的问题。期间参加了一些杂七杂八的比赛,校赛只能拿到三等奖,蓝桥杯只能拿到省二。
2023 年:延期入学,被推荐到考试院实习,闲暇时写点题,每周去 leetcode 打周赛。
2024 年:1 月加入几个算法竞赛群,开始随机刷 CF 1600-2100 分题目(洛谷下位绿到下位蓝),年底斩获校赛一等奖(战胜多名 NOIP 省一选手),开始研究如何提升算法竞赛水平,开始算法竞赛教研,开始觉得算法竞赛是非常有意思的事情。
2025 年:继续随机刷 CF,获得蓝桥杯北京赛区第一名(战胜多名 XCPC 金银牌选手),CSP-S 省一。受群友邀请参与 CF 和牛客多校验题。系统整理算法竞赛训练题单。
2026 年:开始研究并实践更高效的算法竞赛训练方案,开发算法竞赛训练效率工具ing,冲击更高水平ing。
可以看到,我的水平主要是靠 2020 年快速过了一遍 + AcWing 课程 + 在 CF 上进行大量训练练出来的,前两项提供了算法知识和经典模型基础,第三项积累了大量的技巧,提升了注意力,学会了如何分析问题。
从哪里学知识点和 trick
- OI-wiki:当目录,对于大的算法主题列的还是比较细的,但是小技巧以及题型还有待丰富和细化。
- 经典书籍:《进阶指南》、《进阶篇》、《算法竞赛》,好处在于错误少,讲得比较严谨且选题有一定的设计。
- 洛谷日报:ctrl + f 搜你想看的主题即可,如果点不进去可以去 Luogu.me 等镜像站看
- 视频课程:
- B 站免费视频
- 各大机构的付费课程(可以介绍自己上过的优缺点)
刷什么题
专题训练:新学某个知识点,或对某个知识点进行补弱时做。专题训练时你事先已经知道了题单大致的主题。本训练目的是学习这个知识点的应用技巧,熟练代码的编写,而不在于训练“如何想到这个问题该用这个知识点”。
随机训练:已经掌握了很多知识点,但是注意不到题目性质,或者无法将题目拆包装转化成能解决的问题,这个时候隐藏 tag 随机刷题比较好。针对提高组和 NOIP,可以随机刷 CF 2200 分以内的题目,知识点几乎不会超纲(但好多题可能几乎啥也不考,就标个构造、数学、贪心...),但考法比较新颖。亦可以随机刷 AT ABC 2000 分以内的题目,这些题目比较有教育意义,考到的技巧在各种算法竞赛中都很常用,如果能稳定切 E 和一半的情况下切 F 的话,说明你的基础比较扎实。
学知识点时可以做典题老题,比如洛谷热门题题单。考前几个月一定要多选新题练,比如洛谷 P10000 之后的题,更能模拟 CNOI 目前的风格,学会剥壳以及积累 trick。
XCPC 近年题目也是值得做的,属于质量很高的线下比赛题,但应该很少有 OIer 专门做,风格和 CNOI 的题目不是特别一样,但可以作为跨界启发。
按照洛谷通过顺序排序的 CF/AT 题,这种题在洛谷上做的多,说明在 CNOI 中这些题里面的技巧是广为人知的,你如果不会就很吃亏。
USACO 等国外 OI 比赛的题目,题目质量有保证。
对于不同目标不同水平的选手的刷题建议
如何记录训练情况(量化,持久化)
写博客:
- 单个题的题解
- 整场比赛的发挥过程和复盘
- 一些零散的,不知道该怎么分类的内容
- 最近一段时间的学习状态
- 贵在频率,不必篇篇完美,这样才能坚持做下来,积累下来训练的过程数据,心理压力也不大
使用量化工具
- 量化每种知识点的水平,从而知道不足之处
- 量化最近做了啥
- 个性化的题目推荐
clist.by
atcoder problemset
atcoder better
codeforces better
有哪些适合的比赛
- ABC:A-F,G 题大部分时候超提高组的纲,暂时不用管,不要在意 rating,不要在意一时的低迷。算法竞赛知识点很多,每次比赛只考几个,在没有全面提升综合能力前,没考到你擅长的或考到你不擅长的,导致成绩波动是正常现象。
- CF:建议不要按时打,可以 vp,建议多做点思维题 构造题 交互题等非传统题,长脑子且适应 CNOI 未来的趋势。
- 牛客周赛:IOI 赛制,难度是宝宝巴士,最难的题一般不超过 CF 1900 分,题目比较经典,适合增加信心。
- 洛谷 核桃 梦熊 云斗等 CNOI 风格的 OI 赛制模拟赛(IOI 或乐多赛制的也凑合),NOI 金牌选手刘承奥(LCA、CommonAnts、蔡德仁)曾锐评,国内线上公开的模拟赛质量吊打付费模拟赛。
如何利用碎片时间训练
- 不在机房,打印题目在纸上做,写思路+推式子,到了机房直接打代码
- 不在机房也可以看书学习新知识点
- 2 小时的两题连打代替 4 小时模拟赛,训练前两题的得分能力。
善于水群
算法竞赛是圈子竞赛,高质量讨论圈会显著影响信息密度与成长曲线
- 敢建群亮群号的选手,以后水平都不会差
- 能被吸引进群的,大部分不是混子
- 所以加群大概率能接触到很多厉害的选手
- 我加入的灵茶山艾府 500 人的群里,有至少 200 人是 CF 2100 分橙名以及以上的选手,在这样的环境里讨论和训练,自己的水平不可能提升不了。
- 如果是讨论刚发的题目,你可以看到大手子们的思考过程,看多了你就会模仿他们的思考方式,从而建立从题面到解法的“非线性映射”。
- 可以在 B 站或洛谷逛逛,看到你觉得比较厉害的人建了粉丝群就加进去,进去感觉学习氛围不错就留下来。可优先加带每日一题之类的活动的群,学习氛围一般较好(小羊肖恩、灵茶山艾府)
- 你可以加几个大佬,请教一下经验,如果你表现得还行,可能也能从大佬那里获得一些机会或者信息
- 此外 XCPC 群也可以加,可以看一下 ACMer.info
如何使用 AI 辅助训练
首先,一定不是直接把题喂给 AI,然后让它帮你做了,尤其是比赛时!
但是,你可以尝试做下面几个事情:
- 脑速练习,如果你代码能力已经有了,但是你觉得自己拆包装和转化问题的能力不强,你可以尝试只写思路不写代码,由 AI 根据题目和你的思路生成,从而快速验证思路正确性。这样一天能切十几题,并快速在脑中建立思考路径。
- 做完一个题后,进行题目考点或 trick 总结
- 相关题目推荐(针对于不常见的名字,各大 OJ 上没有 tag 的技巧)
- debug 不推荐,建议绝大部分时候仍然需要独立进行,但如果你一个题目的 bug de 了半小时以上,建议还是求助,你考场上都不会花这么久 debug,平时花这么久也是在耽误你其他的训练时间。求助 de 出来之后及时记录和回顾即可,靠次数而不是单次时间解决问题。
- 如果你知道一个题目大概的描述,但是找不到这个题的话,可以试试原题机,这样就避免了向人肉题库发起查询。对于实在找不到但是正解你知道的题,你可以让 AI 给你生成暴力代码、数据生成器和对拍器,然后自己写正解代码。(异或和的平方和)
- 造数据:这里指的是,如果有个题你不知道如果考场上遇到,该咋造合法或高质量数据进行对拍,可以去问一下,比如图论题和串串题的数据很容易造弱,你需要学习一种好写且质量有一定保证的数据生成方法。
- 题目推荐:ACDLadders,根据你的分数,给你推荐和你相同分段且上分快的人刷的题目是什么。具体的推荐逻辑:blog
机构
代码源
梦熊
算法竞赛之外的世界
一些计算机里其他的方向,适用于大学里去探索,或者现在对 OI 不太感兴趣但对计算机感兴趣的学生
杂
从教练/出题人的角度学习/训练。