吞下星星的少年·-·头像

算法竞赛入门(icpc,ccpc,百度之星,天梯赛,码蹄杯,蓝桥杯)

这篇路线面向已经完成 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 指出漏洞

常用入口:OI Wiki、洛谷训练题单。

四、前期算法知识清单

下面是我建议新手前期优先掌握、同时使用频率较高的算法、数据结构和其他基础内容。清单不代表严格学习顺序,也不需要一次全部学完。

类别

知识点

基础实现

模拟、枚举、排序、贪心

数学与位运算

位运算、进制、模运算、快速幂、质数筛、GCD、LCM、素数性质、质因数分解

数组处理

前缀和、差分、离散化、双指针、高精度

基础数据结构

栈、队列、树、图、并查集

递归与搜索

递归、递推、回溯、DFS、BFS

二分与动态规划

二分、线性 DP

学习每个算法时,先在洛谷、牛客等平台搜索模板题。理解题目大概意思后,试着写出暴力解法,再按照上面提到的学习资源补足知识点。学会模板题后,集中练习同类题,把“看懂”变成“能独立写出来”。

五、学习方法

1. 不要只背模板

背模板可以解决熟悉题,但很难迁移到新题。遇到一道做不出来的题,可以依次问自己下面几个问题:

1.  题目要求解决什么问题?

2.  暴力算法是什么?

3.  暴力算法为什么会超时?

4.  能否利用数据结构或数学性质优化?

5.  算法的时间复杂度是多少?

这个分析过程,比单纯记住十几个算法模板重要得多。

2. 从模板题到同类题

先找模板题,确认输入输出、边界和代码框架;再连续做几道同一知识点的题,观察题目怎样变式;最后回到比赛,用补题暴露自己真正没有掌握的部分。

六、训练题单

题单建议按知识体系推进,不要只追求题号数量。洛谷训练题单适合按专题查漏补缺;牛客技能树把知识点组织成类似游戏的成长路径,适合从零基础逐步走向 XCPC 铜奖阶段。

1. 洛谷训练题单

训练入口:洛谷训练题单

  1. 牛客技能树萌新篇

牛客tracker

牛客技能树提供游戏式刷题体验,从零基础到 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

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--