本指南包含六个分区:基础知识、铜组、银组、金组、铂金组和进阶。每个分区 又分为若干类别,每个类别由一组模块组成。每个模块(例如你正在阅读的 这一篇)对应网站上的一篇文章或一个页面,通常由三部分组成:
- 课程正文:通过一道重点题介绍概念;
- 代码实现:给出重点题的解法;
- 练习题:帮助你学习如何将概念应用到不同题目中。
部分较少考查的模块会标为“可选”。如果目标只是晋级对应组别,不一定要完成这些 模块;不过后续更高组别可能会引用它们。
课程正文
课程正文由精选的外部资料、题目和我们编写的补充说明组成。
- 我们会尽可能链接已有的在线资料。
- 目标是帮助你理解相关概念。
- 内容应按顺序学习。
- 通常以至少一道重点题开始。
- 重点题直接应用所学概念,也适合测试你的实现。
- 强烈推荐阅读的外部资料会带有星标。如果仍有不理解的地方,可以继续阅读 其他资料。若多份资料内容基本相同,至多标记其中一份。
代码实现
课程正文之后通常会给出重点题的解法实现。
- 所有模块都会提供 C++ 代码。
- 至少铜组至金组会提供 Java 代码。
- 至少铜组及部分银组会提供 Python 代码。
如果重点题题面没有给出样例输入输出,模块中会另行提供。
练习题
读完课程后,你会看到来自不同来源(不仅是 USACO)的大量题目,用于练习所学概念。
- 题目大致按照推荐完成顺序排列。
- 不必完成每一道题,只需做到对本模块内容足够熟悉。我们认为最值得做的题会带有星标。
如果某道题不能很好体现对应主题,请告诉我们。
题解
对于没有题解或现有题解质量不佳的题目,我们会尽力编写完整题解。_星标题目通常 会有更好的题解。_如果你认为某题需要题解,请通过“联系我们”按钮告知我们。
Warning!
目前许多简略题解实际上帮助不大。
题目难度(铜组至金组)
难度表示学习完当前模块后,这道题预计仍有多大挑战,并非题目的绝对难度。 因此不同模块间的难度不能直接比较,即使它们属于同一组别。
难度从 **Very Easy(非常简单)**到 Insane(极难)。
- Very Easy:与模块相关,但即使阅读资料前也应能较快解决。
- Easy:熟悉模块的人可以较快解决;刚读完星标资料的人也应能够入手。
- Medium:需要更多思考。
- Hard:可能需要投入相当多的时间。
- Very Hard:即使对应组别的顶尖选手也会感到困难,通常需要多层观察和超出 本模块的知识。
- Insane:一般不会出现在对应组别的合理比赛中,升到更高组别后再考虑即可。
来源和标签规范
- 遵循题库页面中已有来源和标签的格式。
- 不同标签应拆成不同字符串,例如写成
['Meet in the Middle', 'DP'],而不是['Meet in the Middle, DP']。 - 部分来源会自动获得悬停时显示的提示文字。未自动分配提示的来源可通过
sourceDescription指定。
自定义组件
模块有时会包含自定义组件,下面是一些常见组件。
进阶提示
作者提供的实用建议。
隐藏内容
Optional: 可选内容
并非所有内容都是算法竞赛必需知识。可以跳过可选内容;感兴趣的话也欢迎深入探索。
Warning!
请特别留意警告块中的内容!
有关自定义组件的更多信息,请参见使用 MDX。
状态
题目状态:
- Not Attempted:尚未尝试。
- Solving:正在解题,会显示在仪表盘的活跃题目中。
- Solved:已解决。
- Reviewing:已解决但希望继续显示在活跃题目中以便复习。
- Skipped:暂时跳过但打算以后再做,会显示在活跃题目中。
- Ignored:已经跳过且不打算再做;若在设置中启用,仍会显示在活跃题目中。
模块(及资源)状态:
- Not Started:尚未开始。
- Reading:正在阅读,会显示在仪表盘的活跃模块中。
- Practicing:正在练习,会显示在活跃模块中。
- Complete:已完成。
- Skipped:暂时跳过但打算以后再学,会显示在活跃模块中。
- Ignored:已经跳过且不打算再学;若在设置中启用,仍会显示在活跃模块中。