这篇路线面向已经完成 C++ 基础语法和 STL 入门的同学,整理了赛事选择、学习资源、前期知识清单、刷题方法和训练节奏。零基础同学建议先看完《C++ 萌新语法入门篇》,再从这里开始。
先确认基础和题量,再选择入门赛事;随后按资源表自学,用算法知识地图补齐基础,最后通过模板题、同类题和比赛补题形成训练闭环。
一、学习前提
前提条件是 C++ 基础语法过关、STL 熟练掌握,并且做过一定题量、具备基本的算法思维。如果已经完成语法入门篇和每日一题,一般可以顺利进入这一阶段;其他编程语言同理。
赛事部分会写到难度、性价比、获奖路径和参赛体验。这些内容主要来自我的个人经历和多方了解,方便大家做赛前选择。规则、奖项比例和晋级方式可能随年份调整,报名前仍要核对当届通知。
二、赛事选择
先看六项常见赛事的赛制和参赛特点,再根据当前基础、目标和可投入时间决定先参加哪些比赛。
| 赛事 | 赛制 | 参赛难度或路径 | 主要特点 |
| ICPC | ACM | 省赛 → 全国邀请赛 → 亚洲区域赛 → EC Final → World Final | 认可度和难度很高,区域赛需先获得参赛资格 |
| CCPC | ACM | 省赛 → 全国邀请赛 → 区域赛 → 全国总决赛 | 与 ICPC 类似,区域赛名额更少 |
| 百度之星 | ACM | 个人参赛,决赛按当年规则入围 | 个人算法赛事,题目难度对标 XCPC |
| 天梯赛 | IOI | 个人分数与团队成绩结合,具体以规则为准 | 偏应试,题目分为 L1、L2、L3 三档 |
| 码蹄杯 | ACM | 省赛多场,获奖者按规则进入决赛 | 线上赛,可用来提前适应 ACM 赛制 |
| 蓝桥杯 | OI | 省赛 → 国赛 | 按测试点给分,以最后一次提交为准 |
1. ICPC
ICPC 通常也被叫作 ACM,原因是它过去由美国计算机协会赞助,现在由华为赞助。国内常见路径是:省赛到全国邀请赛,再到亚洲区域赛、EC Final,最后是 World Final。区域赛一般还需要先通过网络赛获得参赛资格;我了解到,全国校排前 220 是常见的门槛,所以弱校拿资格的难度也相当高。
从整体难度看,ICPC 的获奖难度依次上升。对普通选手来说,EC 金牌已经是极高荣誉,但奖项常被从小参加信息学奥赛的 OIer 包揽,所以银牌可能已经接近很多人的上限。2020 年以前,仅凭银牌进大厂基本没有太大问题;现在银牌更像一张入场券,但这不代表获奖难度下降,反而仍在上升。
这也是 ICPC 性价比越来越低的重要原因:需要投入大量精力和时间,算法与思维能力要求也高。比如线段树在蓝桥杯中已经算比较难,但在 ACM 赛制中如果考得基础一些,可能只是签到题。
2. CCPC
CCPC 是中国大学生程序设计竞赛,赛制与 ICPC 类似,常见路径是省赛、全国邀请赛、区域赛、全国总决赛。我的判断是,CCPC 区域赛比 ICPC 更难,主要原因是参赛名额更少。
3. 百度之星
百度之星采用 ACM 赛制。我觉得它是个人算法赛事中含金量很高的一项,题目难度对标 XCPC。码蹄杯国一、国二都有机会取得决赛外卡;百度之星在码蹄集报名。
4. 天梯赛
天梯赛采用 IOI 赛制。从含金量看,它可能不如前三个赛事,但仍然是值得参加的比赛,整体风格更偏应试。满分 290 分,175 分可以达到个人国三。
L1 基本是语法题。语法和 STL 没有问题的话,拿到这 100 分比较轻松。
L2 需要基础数据结构和算法知识,例如二分、前缀和、DFS、BFS。基础扎实时拿到这 100 分问题不大,题目不会过度考察思维,此时已经达到个人国三。
L3 考察高级算法、思维和读题能力,一共 3 题。第一题与后两题之间存在明显难度层差,拿到部分分后可以冲击国二。
实际参赛体验也有一些明显的槽点:模拟题较多,输出对行末格式要求严格,题意经常像阅读理解,题目多而时间紧。不过和其他 OI 赛制比赛相比,天梯赛仍然更友好。
5. 码蹄杯
码蹄杯采用 ACM 赛制。相比蓝桥杯,我更喜欢它的赛制,题目整体质量也好于天梯赛。不足是它以线上赛为主、知名度不高,报名费与蓝桥杯接近,还有一些需要提前了解的特殊规则。它属于白名单赛事,有发展潜力,高校认可度也不错。
比赛像 XCPC 一样存在题目难度分布不均的问题,可以通过看榜决定做题顺序。整体难度低于 XCPC 和百度之星,适合提前适应 ACM 赛制。排名先看通过题数,题数相同时比较过题时间和罚时;AC 后再次提交未通过的次数会按每次 20 分钟累计罚时。
难度分为青铜、白银、黄金、钻石、星耀、王者。青铜、白银主要考语法和 STL,黄金及以上进入算法层面。备赛目标可以这样定:想拿省铜,至少做完青铜题并做对部分白银题;想拿省银,要在铜牌基础上提高过题速度,或者全部掌握铜银题;想冲金,就要保证青铜、白银全会且速度快,或者再开一道黄金题。省赛共举办 3 场,语言不限,分职业院校和本科院校。近年来省赛获奖比例大致为 10%、20%、20%,国赛为 10%、20%、30%,具体仍以当届通知为准。
6. 蓝桥杯
蓝桥杯采用 OI 赛制,和高考有些相似:做对多少拿多少分,按测试点给分,不能实时看到反馈,以最后一次提交为准,也不会提供大样例。因此它常被叫作“暴力杯”,对第一次参赛的萌新不算特别友好,也被一些选手调侃为不算算法比赛。
蓝桥杯的题目质量整体好于天梯赛。主要板块包括贪心、模拟、枚举和 DFS,只要保证简单题做对、暴力分拿满,拿省一通常就有机会。省一大约 30 分,省二约 20 分,省三约 10 分,满分 100 分。A 组对应 92 院校学生,B 组对应双非学生,C 组对应专科学生;语言分 C++、Java、Python,语言方面我的感受是 C++ 的获奖难度高于 Java,Java 高于 Python。省一进入决赛,近年来省赛获奖比例大致为 10%、15%、25%,国赛为 10%、25%、40%,具体以当届通知为准。
7. 赛事差异与参赛提醒
我会把 ICPC、CCPC、百度之星放在第一梯队;天梯赛更偏应试;码蹄杯和蓝桥杯的难度接近,但赛制不同。蓝桥杯虽然已经降级,影响力仍然存在。码蹄杯是近几年兴起的赛事,一年举办三场省赛,容错率更高,而蓝桥杯的oi赛制使得它的容错率很低,所以省赛阶段的获奖难度低于蓝桥杯;到了国赛,码蹄杯反而更难,因为 ACM 赛制没有部分分,运气成分更少,而蓝桥杯还能通过暴力拿到部分分。
除天梯赛和蓝桥杯外,其余四项赛事通常允许携带纸质材料,所以平时要逐步积累自己的算法模板。
三、学习资源
资源没有唯一入口,关键是围绕一个问题交叉使用讲解、题解和比赛反馈。
| 渠道 | 用途 | 使用建议 |
| OI Wiki | 免费、开放、持续更新的竞赛知识整合站点 | 查概念、复杂度和常见模板 |
| 博客 | CSDN、博客园等平台的专题文章 | 用来补充推导过程、代码细节和踩坑记录 |
| 视频 | Bilibili、抖音等 | 借助动画理解算法过程,不必强迫自己完整看课 |
| 社群 | 群聊和社团成员 | 主动提问、交流思路,别只收藏资料 |
| 比赛 | 现场做题与赛后补题 | 结合题解复盘,这是最直接的反馈方式 |
| OJ | 牛客、洛谷、Codeforces、AtCoder | 按专题或比赛难度逐级练习 |
| AI | 解释题意、检查边界、辅助调试 | 先自己推一遍,再让 AI 指出漏洞 |
四、前期算法知识清单
下面是我建议新手前期优先掌握、同时使用频率较高的算法、数据结构和其他基础内容。清单不代表严格学习顺序,也不需要一次全部学完。
| 类别 | 知识点 |
| 基础实现 | 模拟、枚举、排序、贪心 |
| 数学与位运算 | 位运算、进制、模运算、快速幂、质数筛、GCD、LCM、素数性质、质因数分解 |
| 数组处理 | 前缀和、差分、离散化、双指针、高精度 |
| 基础数据结构 | 栈、队列、树、图、并查集 |
| 递归与搜索 | 递归、递推、回溯、DFS、BFS |
| 二分与动态规划 | 二分、线性 DP |
学习每个算法时,先在洛谷、牛客等平台搜索模板题。理解题目大概意思后,试着写出暴力解法,再按照上面提到的学习资源补足知识点。学会模板题后,集中练习同类题,把“看懂”变成“能独立写出来”。
五、学习方法
1. 不要只背模板
背模板可以解决熟悉题,但很难迁移到新题。遇到一道做不出来的题,可以依次问自己下面几个问题:
1. 题目要求解决什么问题?
2. 暴力算法是什么?
3. 暴力算法为什么会超时?
4. 能否利用数据结构或数学性质优化?
5. 算法的时间复杂度是多少?
这个分析过程,比单纯记住十几个算法模板重要得多。
2. 从模板题到同类题
先找模板题,确认输入输出、边界和代码框架;再连续做几道同一知识点的题,观察题目怎样变式;最后回到比赛,用补题暴露自己真正没有掌握的部分。
六、训练题单
题单建议按知识体系推进,不要只追求题号数量。洛谷训练题单适合按专题查漏补缺;牛客技能树把知识点组织成类似游戏的成长路径,适合从零基础逐步走向 XCPC 铜奖阶段。
1. 洛谷训练题单
训练入口:洛谷训练题单
- 牛客技能树萌新篇
牛客技能树提供游戏式刷题体验,从零基础到 XCPC 铜,帮助完善知识体系。
七、比赛与训练方式
系统学完上面的算法并刷完题单后,就可以逐步增加线上比赛,当然也可以边学边打,这并不矛盾。我建议先从牛客周赛、AtCoder ABC 和 Codeforces Div. 2、Div. 3、Div. 4 这些比赛练起。
| 平台/比赛 | 难度 | 适合训练什么 |
| 牛客周赛 | 较低 | 基础算法、经典模型,适合刚学会语法的选手和需要巩固基础的校招选手 |
| AtCoder ABC | 略高于牛客周赛 | 经典算法和问题模型,赛后官方会发布题解 |
| Codeforces Div. 4 | 入门 | 基础思维与代码实现 |
| Codeforces Div. 3 | 中等偏易 | 读题、构造和常见模型 |
| Codeforces Div. 2 | 更高 | 更强思维训练,难度高于 Div. 3、Div. 4 |
1. 赛后补题
牛客周赛通常在每周周末晚上 19:00 举行,赛后会发布题解,并会在 Bilibili 发布官方题解。AtCoder ABC 的题解可以在官网、知乎和 Bilibili 等平台查找。Codeforces 的题解可以在赛后讨论区和视频平台寻找,也可以借助 AI 辅助理解。
赛后不要只抄题解。先判断自己卡在题意、模型、数据结构还是代码实现,再重新独立写一遍。只有能脱离题解复现,才算真正补完一道题。
2. 一条更短的实战路径(感觉比较邪修了,但是没有那么枯燥)
还有一条更偏实战的路线:掌握 C++ 语法、STL、模拟、枚举和贪心后,直接去参加比赛,遇到一个算法就学一个。它的好处是反馈快,不容易被长时间的理论学习拖住;代价是知识体系容易出现空洞。选择这条路时,仍然要用题单定期补漏。
八、后续学习路线(其实这一点我在c++萌新语法入门篇已经说过了,感兴趣的同学自行翻阅)
后续可以按“基础—专项—比赛”推进:先打牢语法、STL、模拟、枚举、排序和贪心;再按二分、前缀和、差分、搜索、并查集、树、图、数学做专题训练;最后通过线上赛、补题和模板复盘巩固。更完整的进阶策略,就需要去系统性地学习一些高级算法和数据结构了,当然通过赛后补题学习也是可以的,这个根据自身情况而定
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2501_94316951/article/details/170744269



