从第一行代码到比赛现场:OI Wiki 算法竞赛学习资源实战指南
【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki
如果你刚学会 C++ 却不知道该注册哪个 OJ、买哪本书、看哪门课,这篇文章就是为你写的。它基于 OI Wiki 的《学习资源》文档与"比赛相关"章节,把算法竞赛需要的 OJ 平台、书籍、备赛课程、实用工具和题集材料,按"你现在处于哪个阶段"重新组织成一份可直接执行的清单。读完你能拿到的是:当前阶段该用的平台、该读的书、该跟的题单,以及一套从入门坚持到赛前冲刺的推进节奏,而不是又一堆名字。
资源选型速览:按当前阶段选平台和书单
先给一张决策表,用来快速定位你该跳去哪一节。
| 你现在的情况 | 典型目标 | 推荐平台 | 推荐配套材料 |
|---|---|---|---|
| 刚学完 C++ 基础,还没 AC 过题 | 拿到第一次通过 | 洛谷 / AizuOJ / PTA | 《啊哈算法》或《算法竞赛入门经典》 |
| 能刷基础题,想按专题深入 | 系统性专题训练 | Codeforces / AtCoder / CSES / USACO | 《算法竞赛进阶指南》或《挑战程序设计竞赛》 |
| 临近比赛,需要真题与提速 | 真题训练、对拍复盘 | UOJ / LibreOJ / QOJ + Vjudge | 洛谷题单 / USACO Guide |
| 目标求职面试 | 面试型算法题 | LeetCode | 校招面试指南 |
入门阶段:从零到第一道通过的题
入门 OJ 平台怎么选
- 洛谷:适合中文圈的新手。社区庞大、各类 OI 真题和习题齐全,题单体系让你知道"下一步该刷什么",对自学者的友好度在中文平台里基本是默认首选。
- AizuOJ:适合完全没有教练带、想"跟着一套课走完"的人。它自带编程、数据结构、算法的入门课程序列,从语法到专题一路排好,按顺序做完就是完整的入门流程。
- PTA(拼题 A):适合先把语言手感磨扎实的人。题目从基础编程阶梯式过渡到算法,反馈机制对新手很温和,适合当"过渡站"。
- POJ 与百练/OpenJudge:适合想接触英文题、练读题能力的人。POJ 是国内资历最老的评测站之一,基础题经典;不想折腾环境的话可以直接在百练题库提交 POJ 的题目。
- LeetCode:如果你的竞赛训练最终要服务于求职,中文分站上手成本低,可以直接从入门期就把它当作第二平台。
- 51Nod:适合想专项补数学的人,数学题与思维题的数量和质量在同类站里很突出。
零基础先看哪几本算法竞赛书籍
- 《啊哈算法》(纪磊):适合对算法只有模糊兴趣的人。语言轻松、插图幽默,用来建立"什么是算法"的直觉,不追求深度。
- 《算法竞赛入门经典》(刘汝佳,俗称"紫书"):适合刚学完 C++ 想系统起步的人。第一、二版都有配套资源仓库,第二版另有习题选解,是入门阶段最稳的一本主教材。
- CCF 中学生计算机程序设计系列(入门篇/基础篇/提高篇):适合走 OI 路线、希望循序渐进的学生。入门篇建议配合勘误使用,三篇连读构成完整台阶。
- 一本通系列(信息学奥赛一本通及其提高篇、高手训练):适合跟随国内 OI 课堂体系的人,提高篇内容密度大,建议挑着读。
- 《算法竞赛入门到进阶》(罗勇军、郭卫斌):适合希望一本书覆盖从入门到进阶、不想中途换教材的人。
新手友好的公开备赛课程
- 清华大学·数据结构(学堂在线):适合国内学习者,把大学级数据结构主课完整走完,比零散看博客扎实得多。
- NUS CS 3233(Steven Halim 主讲):适合英语自学者,是一门完整的竞赛编程课,能帮你建立"竞赛怎么解题"的整体感觉。
- 算法详解系列(Tim Roughgarden)配套课程:适合已有语言基础、想补理论的人,书和课建议同步使用,中文译本已出前两卷。
选型建议:入门阶段宁少勿多,"1 个平台 + 1 本书 + 1 门免费课"足够。平台先认准一个把题刷下去,别在注册第三个 OJ 上浪费时间。
系统阶段:按专题深入的进阶打法
专题训练平台怎么选
- Codeforces:适合想养成"每周打一场 Rating 赛"习惯的人。比赛系列多、题目质量高,是全球竞赛社区的核心,刷它的题单等于紧跟主流水平线。
- AtCoder:适合喜欢"题目本身有意思"的人。ABC/ARC/AGC 分级赛制覆盖入门到顶级,数学味和趣味性在各大平台里都排得上号。
- CSES:适合想"每个专题刷透一遍"的人。题库按专题划分、描述干净,和《Competitive Programmer's Handbook》配套使用效果最佳。
- USACO(配 USACO Guide):适合想要标准化分级路径的人。Bronze 到 Platinum 逐级递进,Guide 把各级别的训练资源整理得非常完整。
- DMOJ:适合想一站式收集多国赛题的人。题库本质是各大比赛的存档,语言支持广,也定期自办比赛。
- Kattis:适合 ICPC 方向选手。题库以类 ICPC 题目为主,按类 ELO 机制根据你的解题历史推荐 trivial 到 hard 四个档位的题,找难度合适的题很省力。
- QOJ:适合以"赛题存档 + 按专题过题"为主训练方式的人,国内外 OI 和 ICPC 题目收录量大。
成体系的进阶教材怎么选
- 《算法竞赛进阶指南》(李煜东):适合刚出基础期、要进专题的人。按专题组织、有配套资源仓库,是中文竞赛圈使用率最高的进阶教材之一。
- 《挑战程序设计竞赛》(秋叶拓哉等):适合 ICPC 方向、喜欢通俗写法的人,配合 AtCoder 的题刷体验更佳。
- 《Competitive Programmer's Handbook》(Antti Laaksonen):适合英文自学者。作者花了三年业余时间写成,覆盖面广、详略得当,与 CSES 题库是天然的一对。
- 《算法艺术与信息学竞赛》(刘汝佳):适合从入门经典过渡到提高阶段的人,是紫书的进阶延续。
- 《算法导论》(Cormen 等):适合想补理论厚度的人。内容大学化,不必通读,按专题当字典查。
- 《具体数学》《组合数学》(Brualdi):适合数学底子薄、在组合与推导题上吃亏的人,按需补哪块读哪块。
- 《挑战编程:程序设计竞赛训练手册》(Skiena/Revilla):适合想以"解题方法论"为主线学竞赛的人,有翻译后的在线电子版。
- 邓俊辉《数据结构(C++ 语言版 第 3 版)》:适合想把数据结构真正学透的人,建议跟配套课程与习题解析一起使用。
- 《计算几何:算法与应用》(伯格 著,邓俊辉 译):适合正式开几何专题的人,是计算几何方向的经典入门译著。
- acm-cheat-sheet:适合需要快速查模板和常用代码的人,平时当速查手册用。
对应的高校备赛课程怎么挑
- CMU 15-295、UCF COP 4516、Stanford CS 97SI、UBC CPSC 490:这几门都是完整的竞赛编程课,适合想"跟一个老师完整走一遍"的人,任选一门即可,内容高度重叠,不用都看。
- Stonybrook CSE 392(Skiena 主讲):适合想从出题人视角理解题面与判题的人,和上面这本《挑战编程》同源。
- 清华大学·计算几何(学堂在线):适合把几何专题当主线的人,可与 OI Wiki 的计算几何章节对照着看。
选型建议:系统阶段的关键是选定"主场平台"——OI 方向偏 Codeforces/AtCoder + CSES,ICPC 方向再加 Kattis/DMOJ;教材跟定一本进阶主书,其余当字典。各专题的知识点可以直接对照 docs/contest/roadmap.md 里列出的条目逐项核对,缺什么补什么。
赛前阶段:冲刺、真题与复盘
赛前冲刺题单清单
- 洛谷题单:适合想要"现成的按专题排好的队列"的人,从入门到省选/NOI 各阶段都有维护。
- USACO Guide:适合以 USACO 各级别为标尺训练的人,分类资源和题解齐备。
- -Morass- 的 Codeforces 分类题单:适合想在 CF 上做专题化刷题的人,社区口碑很好,难度分层清楚。
- POJ 训练计划:适合想跟一份经典分阶段清单走的人,老牌但依然有效。
- Junior Training Sheet:适合基础期选手,是少数明确"对新手友好"的训练计划表。
赛题存档与高强度对抗训练
- UOJ:适合提高组以上、觉得常规题太简单的人。原创比赛题和 CCF/THU 题占比高,整体难度偏上。
- LibreOJ:适合赛后复盘的人。所有测试数据和提交代码对用户开放,透明度最高,查错和对比思路非常方便。
- QOJ:适合"存档式"训练,把国内外的 OI/ICPC 真题集中过一遍。
- Open Trains:适合 ICPC 方向选手。Open Cup 历年赛题加 Petrozavodsk 训练营题目都在题库里,且支持虚拟比赛,可以按真实赛时自己卡时间。
- TimusOJ:适合想刷俄罗斯风格题的人,乌拉尔联邦大学校赛、ICPC 乌拉尔区域赛题目收录全。
- 多校联合训练(HDU):适合 ICPC 队伍。每年暑期的 Multi-University Training Contest 是国内队伍的高强度对抗训练,赛题即存档。
- 北京大学 ICPC 暑期课课件与例题:适合想直接看顶级选手怎么讲题的人,例题通过 Vjudge 组织,可以边看边做。
- Vjudge:适合需要按专题组题、打虚拟比赛的人,是多平台题目的聚合判题站,赛前模拟的标配。
- Project Euler:适合想跳出 OI 题风、专门练数学建模的人,题目与常规竞赛题差异明显,当调剂用。
选型建议:赛前阶段"真题 + 虚拟赛"的性价比高于做新题。一个存档平台(UOJ 或 QOJ 二选一)+ 一份题单 + Vjudge 定时打一场虚拟赛,比到处找新题更有效。赛制差异(OI 赛制、IOI 赛制、CF 赛制)可参考 docs/contest/oi.md 提前适应。
工具箱:从调试到画图
调试与代码可视化
- Compiler Explorer:适合想确认"编译器到底生成了什么"的人,可切换不同编译器,研究优化手段的实际效果。
- C++ Insights:适合被隐式转换、移动语义坑过的人,从编译器视角反看自己的源码。
- Python Tutor:适合入门期想看代码一步步怎么执行的人,流程可视化做得很直观。
- VisuAlgo / USF / Algorithm Visualizer:适合对"算法跑起来是什么样子"有好奇心的人,覆盖排序、树、最短路、最大流等常见过程,VisuAlgo 有中文界面。
- Quick C++ Benchmark:适合做微基准测试的人,在线对比两个及以上实现的运行速度。
- 《100 个 gdb 小技巧》:适合想在调试工具上再深一层的人,系统性的 GDB 技巧合集。
- uDebug:适合做 OJ 题时对拍找错的人,提供调试辅助数据。
数学与公式辅助
- OEIS:遇到陌生整数数列先查它,竞赛里猜递推、猜通项的必备一步。
- Inverse Symbolic Calculator:适合从实数反推表达式的人,猜出小数背后对应的解析式。
- Wolfram Alpha:适合需要快速算数、积分、查符号的人,覆盖面很广。
- Mathpix:适合写题解、整理笔记的人,截图直接转 LaTeX,效率极高。
- Detexify 手写符号识别 + LaTeX 数学公式参考:适合手写公式想快速找到对应 LaTeX 命令的人,两个配合用。
在线运行与画图
- Try It Online:适合临时想跑一段代码的人,支持 600+ 语言、带 IO 交互,可直接分享。
- Wandbox:适合想固定某个编译器版本在线编译的人,支持 30+ 语言与多种 GCC 版本。
- 图论画板 + GraphViz:前者画示意图快,后者适合用描述语言批量产图,写题解配图都够用。
- cppreference:查 C/C++ 标准库用法的第一去处,比翻记忆可靠。
OI Wiki 自身的工具软件章节还收录了 Arbiter、Cena、Lemon 等本地评测工具、Testlib 文档与 Polygon 出题平台文档,和上面这批在线工具刚好覆盖"刷题、调试、出题"的完整链路。
资源维护与参与:这份清单为什么可信
资源清单最大的风险是"链接烂了没人管"。OI Wiki 用两层机制对冲这个问题:一是内容规范层面,每篇文档的头部保留完整作者署名,条目由多位贡献者共同评审迭代;二是自动化层面,仓库中的 scripts/checker/ 会对文档的标题层级、图片引用、公式语法做检查,scripts/linter/ 提供预处理与后处理规则,不合规的提交会被拦下。构建通过时所有检查项全绿,就像下面这张截图所示。
如果你刷题时发现某个资源失效,或知道一个新平台、一本新书,可以直接按 docs/intro/htc.md 里的贡献方式提修改——对新手来说,"改一个坏掉的链接"就是参与这个项目的最好起点。
结语:一份最小可执行组合
不必把上面所有资源都装上。给你一个可以立即执行的起点:
- 入门期:洛谷 + 《算法竞赛入门经典》+ 洛谷题单里的入门队列,外加一门免费数据结构课,目标是把基础题刷到稳定 AC。
- 进阶期:主场换成 Codeforces(或 AtCoder)+ 《算法竞赛进阶指南》+ USACO Guide 或 CSES 专题,目标是每个专题都能独立做完一套题。
- 赛前期:UOJ/QOJ 真题 + 一份高质量题单 + Vjudge 虚拟赛,目标是按真实赛时完整模拟。
推进节奏上,每个阶段只用"1 个平台 + 1 本书 + 1 份题单"跑完整周期再切换,换得太快是新手最常见的坑。清单是工具,真正涨分的是你在这些平台上稳定刷下去的那些晚上。
【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考