← 竞赛体系
COURSE · 课程路径

USACO Silver

CURRICULUM

课程大纲 · 能力地图

按「大类 → 难度 → 前后顺序」组织,共 215 个能力标签。 其中 135 个为相对「USACO Bronze」新增,其余为前置级别已覆盖; 同一大类内循序渐进,绿色为已备教案、可直接进入学习;灰色为编写中。

新增 标记表示该知识点是「USACO Bronze」基础上本级别新加入的,需重点学习。

仅展示相对「USACO Bronze」新增的内容 (135)关闭可查看完整大纲(含前置级别已覆盖的知识点)

程序设计基础

14 个标签 · 14 已就绪
序号知识点能力目标操作
18嵌套循环新增01-A2-1掌握"嵌套循环":在循环中再套循环,用来扫描二维结构(矩阵、棋盘)或枚举组合。
19嵌套分支新增01-A2-2掌握"嵌套分支":在 if 内部再写 if/else,处理多维条件,并理解 else 与哪个 if 配对。
20多条件逻辑新增01-A2-3掌握用 and/or/not(C++ 的 &&/||/!)组合多个布尔条件,正确写出复合判断,并理解短路求值。
21类型转换新增01-A2-4理解隐式/显式类型转换,分清整数除法与浮点除法,避免取整与精度错误。
22long long新增01-A2-5知道 int 范围有限,大数用 long long(C++ 64 位整数)避免溢出。
23浮点数基础新增01-A2-6理解浮点数的二进制近似表示与精度坑(相等比较、累积误差),会用 EPS 比较。
24字符与 ASCII新增01-A2-7理解字符在计算机中以 ASCII 码存储,掌握字符与整数的互换及常用字符区间。
25函数新增01-A2-8能把一段功能封装成函数,理解定义、调用、返回值,实现"一次编写、多处复用"。
26参数传递新增01-A2-9理解 C++ 的"值传递"——函数收到的是实参的副本,修改形参不影响外部;并知道如何把结果交回。
27引用新增01-A2-10理解 C++ 引用(变量的别名),用引用参数让函数修改外部变量或避免大对象拷贝。
28作用域新增01-A2-11理解变量作用域(局部/全局)与可见性,避免命名冲突与"未定义"错误。
29递归基础新增01-A2-12理解"函数调用自身"的递归思想:把大问题拆成相同的小问题,并写出正确的终止条件。
30结构体新增01-A2-13能把多个不同类型的数据组合成一个"结构体"类型,管理一组相关属性。
31自定义数据类型新增01-A2-14理解 typedef/using 与枚举 enum,给已有类型起别名、定义有限取值集合,提升可读性。

复杂度与算法分析

10 个标签 · 10 已就绪
序号知识点能力目标操作
48O(log n)新增02-A2-1理解 O(log n) 时间复杂度:每次操作把问题规模减半(如二分查找),所需步数约为 log₂n,增长极慢。
49O(n log n)新增02-A2-2理解 O(n log n):线性乘对数,是归并、快排这类基于比较的排序能达到的最优复杂度。
50O(n²)新增02-A2-3理解 O(n²):双重循环的典型复杂度,常见于朴素排序与朴素枚举,适合 n 较小的场景。
51多项式复杂度新增02-A2-4理解多项式复杂度 O(n^k):运行时间是关于 n 的多项式,次数 k 越低越快。
52指数复杂度新增02-A2-5理解指数复杂度 O(2^n) 与 O(c^n):随 n 爆炸增长,常见于暴力枚举/回溯,需要剪枝或换算法。
53空间复杂度新增02-A2-6区分时间复杂度与空间复杂度:空间复杂度衡量算法额外占用的内存随 n 的增长。
54最坏情况新增02-A2-7理解最坏情况复杂度:输入最不利时算法需要的资源上界,是可靠性的保证。
55最好情况新增02-A2-8理解最好情况复杂度:最有利输入下的资源消耗下界,常用于"已接近目标"的快速路径。
56平均情况新增02-A2-9理解平均情况复杂度:对所有可能输入取期望,比最坏更贴近"典型"表现。
57嵌套循环复杂度新增02-A2-10掌握分析嵌套循环复杂度:内外层循环次数相乘,注意"与 n 无关"的内层与"随外层变化"的内层。

模拟与枚举

8 个标签 · 0 已就绪
序号知识点能力目标操作
86完全搜索新增03-A3-1课程框架已就绪,教案待补充。编写中
87递归枚举新增03-A3-2课程框架已就绪,教案待补充。编写中
88子集枚举新增03-A3-3课程框架已就绪,教案待补充。编写中
89排列枚举新增03-A3-4课程框架已就绪,教案待补充。编写中
90状态枚举新增03-A3-5课程框架已就绪,教案待补充。编写中
91枚举 + 剪枝新增03-A3-6课程框架已就绪,教案待补充。编写中
92枚举 + 数学新增03-A3-7课程框架已就绪,教案待补充。编写中
93枚举 + 二分新增03-A3-8课程框架已就绪,教案待补充。编写中

数组与基础预处理

8 个标签 · 8 已就绪
序号知识点能力目标操作
106前缀和新增04-A2-1掌握一维前缀和:预处理 s[i]=a[0..i-1] 的和,使任意区间和 O(1) 查询。
107二维前缀和新增04-A2-2掌握二维前缀和:预处理后任意子矩阵和 O(1) 查询,使用容斥公式。
108差分新增04-A2-3掌握一维差分:对区间加减的多次操作后,用 O(1) 标记、最后 O(n) 还原,避免每次 O(n) 修改。
109二维差分新增04-A2-4掌握二维差分:对子矩阵整体加减,用 O(1) 标记、最后 O(nm) 还原。
110前缀最值新增04-A2-5掌握前缀最值:预处理前缀的最大值/最小值,支持 O(1) 查询"从开头到某位置"的极值。
111后缀最值新增04-A2-6掌握后缀最值:从某位置到结尾的极值,常与前缀最值配合解决"两侧约束"问题。
112前后缀统计新增04-A2-7综合运用前缀与后缀预处理,解决"左侧/右侧满足条件的个数或极值"类问题。
113离线预处理新增04-A2-8理解离线思想:先把所有询问收集起来,按某种顺序统一处理(常配合排序或前缀结构),降低总复杂度。

排序

7 个标签 · 7 已就绪
序号知识点能力目标操作
129快速排序新增05-A2-1掌握快速排序:选轴(pivot)分区,使左边≤轴、右边≥轴,再递归处理左右。
130归并排序新增05-A2-2掌握归并排序:分治地把两半分别排好,再合并两个有序序列,稳定且稳定 O(n log n)。
131sort新增05-A2-3掌握语言内置排序(Python sorted / C++ sort)的用法与复杂度,能直接对数组排序。
132自定义比较新增05-A2-4掌握自定义比较函数/键,按"自己定义的规则"排序(如按绝对值、按字符串长度)。
133多关键字排序新增05-A2-5掌握多关键字排序:先按主关键字,相同再按次关键字(用元组 key 或稳定排序组合)。
134结构体排序新增05-A2-6掌握对"结构体/对象数组"按某个字段排序(如学生按成绩)。
135稳定排序应用新增05-A2-7掌握"稳定排序"的实际应用:保留并列数据的原有顺序,或实现多关键字排序。

查找与二分

7 个标签 · 7 已就绪
序号知识点能力目标操作
149lower_bound新增06-A2-1掌握 lower_bound:在有序数组中找"第一个 ≥ x"的位置(C++ lower_bound / 手写二分)。
150upper_bound新增06-A2-2掌握 upper_bound:找"第一个 > x"的位置,与 lower_bound 配合统计某值的个数。
151二分边界新增06-A2-3掌握二分求"边界":第一个满足 / 最后一个满足某条件的位置(答案落在有序判定函数上)。
152二分最大值新增06-A2-4掌握"二分答案求最大":当答案越大越难满足时,二分找满足条件的最大值。
153二分最小值新增06-A2-5掌握"二分答案求最小":当答案越小越难满足时,二分找满足条件的最小值。
154二分答案新增06-A2-6综合理解"二分答案":把最优化问题转为"判定 mid 是否可行"的二分搜索。
155单调性新增06-A2-7理解单调性是二分的前提:只有"判定结果随 mid 单调变化"才能用二分。

双指针与滑动窗口

8 个标签 · 8 已就绪
序号知识点能力目标操作
170左右指针新增07-A1-1掌握归并排序:用分治把数组分成两半分别排序,再合并两个有序序列,整体达到 O(n log n)。
171同向双指针新增07-A1-2理解归并过程可顺带统计逆序对数量,把“计数”问题转化为分治合并时的跨段计数。
172区间移动新增07-A1-3掌握非比较排序:计数排序用“值域桶”统计出现次数,桶排序把值域分桶后桶内再排,突破 O(n log n) 下界。
173双指针求区间新增07-A2-1掌握同向双指针(尺取法):用左右指针维护一个区间,根据条件移动右/左指针,高效求出满足某约束的区间。
174双指针求和新增07-A2-2掌握对有序数组用双指针求“和为定值”的组合:两数之和直接左右夹逼,三数之和排序后枚举首元素再双指针。
175滑动窗口新增07-A2-3掌握滑动窗口技巧:在数组/字符串上维护一个随指针滑动的窗口,用哈希或计数实时更新窗口内统计量(和、最值、种类数)。
176最长满足条件区间新增07-A2-4用可变滑动窗口求“最长满足某约束的区间”,如最多含 k 个不同字符、或子数组和≤K,掌握“超界即收缩”的模板。
177最短满足条件区间新增07-A2-5用可变窗口求“最短覆盖某条件的区间”,如包含全部目标字符、或子数组和≥S,掌握“满足条件才尝试收缩”。

递归、分治

9 个标签 · 9 已就绪
序号知识点能力目标操作
186递归思想新增08-A1-1理解递归思想:把"规模为 n 的问题"转化为"一个或多个规模更小的同类子问题",直到小到能直接解决。
187递归函数新增08-A1-2能把递归思想写成真正的递归函数:函数体内调用自身,并正确传递缩小后的参数。
188递归终止条件新增08-A1-3掌握写好递归的"第一要素":明确且正确的终止条件(base case),保证递归能停下来。
189简单递归新增08-A1-4通过几个经典小例子(求和、数字各位和、幂、打印)巩固递归写法,体会"相信子问题已解决"。
190分治思想新增08-A2-1掌握分治:把问题分成独立子问题,各自解决后合并结果(与单纯的递归区别在于"合")。
191归并排序新增08-A2-2用"分治"视角重写并理解归并排序的分解与合并过程。
192快速排序新增08-A2-3用分治视角理解快排:选轴分区使问题独立,再递归处理左右子区间。
193二分递归新增08-A2-4掌握二分递归:在递归中把规模对半(而非减一),复杂度降为 O(log n) 或 O(n log n)。
194递归搜索新增08-A2-5掌握用递归进行搜索/枚举(如 DFS 遍历、子集/排列生成),理解搜索树与回溯。

贪心

6 个标签 · 6 已就绪
序号知识点能力目标操作
209排序贪心新增09-A2-1理解贪心算法的两个支柱:贪心选择性质(局部最优能导向全局最优)与最优子结构;并掌握“交换论证”证明。
210区间贪心新增09-A2-2熟练区间调度:按结束时间升序,依次选取与已选不冲突的区间,得到最多互不重叠区间。
211交换贪心新增09-A2-3掌握两类区间贪心:用最少点“刺穿”所有区间(按结束时间,在交集末放点);用最少区间覆盖 [0,T](按开始时间,选能接上的结束最晚者)。
212优先队列贪心新增09-A2-4理解哈夫曼贪心:每次合并两个最小权值,使总代价最小;用于最优前缀码与合并果子等问题。
213活动选择新增09-A2-5掌握“先排序再贪心”的模式:按性价比、按比值、按字典序等排序后顺序选取,常见于任务安排与拼接问题。
214区间调度新增09-A2-6掌握两类调度贪心:任务有截止时间求最多完成数(按截止时间贪心+可反悔);负载均衡用“最长处理时间优先”近似。

搜索

10 个标签 · 10 已就绪
序号知识点能力目标操作
231连通块新增10DFS-A2-1用 DFS 在无向/有向图上求连通分量个数与每个块包含的节点,理解“从每个未访问点出发能到达的全部点”构成一个分量。
232全排列新增10DFS-A2-2掌握含重复元素的全排列:排序后用“同一层相同值只用一次”的剪枝避免重复排列,理解回溯中“层内去重”。
233组合新增10DFS-A2-3用回溯枚举从 n 个元素中选 k 个的所有组合,理解“按位置升序选”以避免重复并自然去重。
234子集新增10DFS-A2-4在子集枚举基础上加入约束(如子集和等于目标、或大小限制),掌握“选/不选 + 剪枝”的回溯框架。
235回溯新增10DFS-A2-5归纳回溯的通用范式:做选择→递归→撤销选择;并掌握两类剪枝——可行性剪枝与最优性剪枝,用以削减搜索树。
236状态搜索新增10DFS-A2-6把“状态”当作节点进行 DFS/回溯搜索:状态含当前位置、已收集物等;通过 visited 记录已搜状态避免重复与环。
252多源 BFS新增10BFS-A2-1掌握多源 BFS:把所有起点同时入队(距离 0),一次遍历即求每个点到最近起点的距离,常用于“最近设施”“地图扩散”。
253分层 BFS新增10BFS-A2-2掌握分层 BFS:用“每层结束标记”或“按层循环”依次处理同一距离的所有节点,便于层序遍历与按层统计。
254状态 BFS新增10BFS-A2-3把“状态”作为 BFS 节点求最短步数(边权为 1):状态=(位置,朝向/钥匙/已访问集合),用 visited 去重保证首次到达即最短。
255BFS + 状态新增10BFS-A2-4掌握双向 BFS:从起点与终点同时扩展,相遇时停止,可指数级减少搜索量;适用于状态空间大但路径深的场景。

图论

14 个标签 · 14 已就绪
序号知识点能力目标操作
395图的定义新增18图基础-A1-1掌握图的两种存储:邻接表(vector<vector<int>>,省空间、遍历快)与邻接矩阵(二维数组,查边 O(1) 但费空间);按稠密/稀疏选结构。
396点新增18图基础-A1-2掌握在一般图上做 DFS/BFS 遍历:用 visited 数组防止重复访问(图可能成环),得到从某点出发能到达的所有节点与遍历序。
397边新增18图基础-A1-3掌握拓扑排序:对有向无环图(DAG)排出顶点顺序,使每条边 u→v 中 u 在 v 前;用 Kahn 算法(入度队列)或 DFS 后序。
398度新增18图基础-A1-4掌握 Dijkstra:在非负权图上求单源最短路,用最小堆每次取距离最小的点松弛其邻边;复杂度 O((V+E) log V)。
399有向图新增18图基础-A1-5掌握可处理负权的单源最短路:Bellman-Ford 对所有边松弛 V-1 轮;SPFA 用队列优化,并在入队次数≥V 时判定负环。
400无向图新增18图基础-A1-6掌握 Kruskal 求最小生成树:把所有边按权升序,用并查集依次加入不形成环的边,直到选够 V-1 条。
401邻接矩阵新增18图基础-A1-7掌握 Prim 求最小生成树:从一点出发,用最小堆不断把“未访问点中离已选集合最近的边”对应的点加入集合,直到覆盖所有点。
402邻接表新增18图基础-A1-8掌握并查集:find(路径压缩)与 union(按秩/大小合并),用于动态连通性、Kruskal、集合计数;近乎 O(1) 每操作。
403图 DFS新增18图基础-A2-1掌握二分图判定:用两种颜色对图染色,相邻点异色;DFS/BFS 染色时若遇同色相邻则非二分图。
404图 BFS新增18图基础-A2-2掌握欧拉路判定:无向图中每个点度数均为偶则有欧拉回路;恰两个奇度点则有欧拉路(起自奇度点);用 Hierholzer 输出路径。
405连通分量新增18图基础-A2-3掌握求树(或无权图)直径:两次 BFS/DFS——任选点求最远点 u,再从 u 求最远点 v,u 到 v 距离即直径。
406Flood Fill新增18图基础-A2-4掌握倍增法求 LCA:预处理每个点向上 2^k 步的祖先 up[u][k],查询时先把两点提到同一深度,再同步上跳找分叉点上方。
407路径新增18图基础-A2-5掌握负环检测:在 SPFA/Bellman-Ford 中,若某点被松弛(入队)次数达到 n 次以上,说明存在可无限缩短的负权环。
408环新增18图基础-A2-6掌握在 Dijkstra/BFS 过程中统计最短路径条数:当找到更短路径时刷新条数,当找到等长路径时累加条数(取模)。

最短路

2 个标签 · 0 已就绪
序号知识点能力目标操作
421网格最短路新增19-A1-1课程框架已就绪,教案待补充。编写中
422BFS 最短路新增19-A1-2课程框架已就绪,教案待补充。编写中

动态规划

10 个标签 · 10 已就绪
序号知识点能力目标操作
462DP思想新增22DP基础-A1-1理解 DP 三要素:状态定义、状态转移方程、边界/初始;用“大问题=小问题组合”避免重复计算。
463状态新增22DP基础-A1-2掌握自顶向下 DP:用递归 + 缓存(记忆化)避免重复子问题,与自底向上填表等价且更易写出。
464转移新增22DP基础-A1-3掌握 LIS:dp[i]=以 a[i] 结尾的最长上升子序列长度,O(n²);以及用“贪心+二分”的 O(n log n) 优化。
465初始状态新增22DP基础-A1-4掌握 LCS:二维 DP,dp[i][j] 为 a 前 i 与 b 前 j 的 LCS 长度,相等则 +1,否则取两侧最大。
466终止状态新增22DP基础-A1-5用数字三角形巩固线性 DP:自底向上,每个点取左下/右下较大者累加,得到从顶到的最大路径和。
467一维 DP新增22DP基础-A2-1掌握 0-1 背包:n 件物品每种至多选一次,dp[i][j] 为前 i 件在容量 j 下的最大价值,转移“选/不选”。
468二维 DP新增22DP基础-A2-2掌握完全背包:每种物品可无限选,转移时容量正序枚举(同一物品可被重复选多次)。
469网格 DP新增22DP基础-A2-3理解背包为何能滚动到一维:当前行只依赖上一行,故用一维数组并按特定顺序更新即可省去第一维。
470记忆化搜索新增22DP基础-A2-4掌握两类背包变体:多重背包(每种有数量上限,可二进制拆分转化为 0-1)与分组背包(每组至多选一件)。
471简单背包新增22DP基础-A2-5用两个经典模型巩固 DP:网格最小路径和(只能右/下)与编辑距离(增删改使两串相同),体会状态设计。

位运算 / 状态压缩

12 个标签 · 12 已就绪
序号知识点能力目标操作
496二进制新增23-A1-1理解十进制与二进制的互转、位权概念,以及整数以补码存储。
497位与新增23-A1-2掌握按位与 &——对应位都为 1 才为 1,常用于判奇偶、取某些位、清位。
498位或新增23-A1-3掌握按位或 |——对应位有 1 则为 1,常用于置位(把某位置 1)、合并标志位。
499位非新增23-A1-4理解按位取反 ~(含补码陷阱),并用它配合 & 来清位。
500异或新增23-A1-5掌握按位异或 ^——相同为 0、不同为 1,利用其自反性做无临时变量交换与"找出现奇数次的数"。
501左移新增23-A1-6理解左移 <<——在不溢出时等价于乘 2^k,用于快速乘除、构造掩码、取位。
502右移新增23-A1-7理解右移 >>——等价于除以 2^k(向下取整),用于快速除二、取位、统计二进制中 1 的个数。
503位掩码新增23-A2-1理解位掩码:用一个整数的二进制位表示一组布尔状态,第 i 位为 1 表示第 i 个选项被选中。
504集合表示新增23-A2-2用整数表示一个有限集合(元素为 0..N-1),元素 i 在集合中当且仅当第 i 位为 1。
505子集判断新增23-A2-3掌握用位运算判断一个集合是否为另一个集合的子集/超集,以及如何枚举子集。
506lowbit新增23-A2-4掌握 lowbit:取出整数二进制最低位的 1 及其后的 0 所构成的值,公式为 x & (-x)。
507popcount新增23-A2-5掌握 popcount(统计整数二进制中 1 的个数),以及位运算统计技巧。

数学与数论

5 个标签 · 5 已就绪
序号知识点能力目标操作
518奇偶性新增24基础数论-A1-1理解整数的奇偶:能被 2 整除为偶数,否则为奇数;掌握用取模或位运算判断奇偶。
519最大公约数新增24基础数论-A1-2掌握用欧几里得算法(辗转相除法)求两个数的最大公约数 gcd。
520最小公倍数新增24基础数论-A1-3掌握用 gcd 求最小公倍数 lcm:lcm(a,b) = a×b / gcd(a,b),并注意先除后乘以防溢出。
521素数新增24基础数论-A1-4掌握判断素数的试除法:只需检查到 √n 的素数/整数因子即可。
522质因数分解新增24基础数论-A1-5掌握质因数分解:把 n 拆成素数因子的乘积,通过不断除以最小因子实现。

哈希

5 个标签 · 5 已就绪
序号知识点能力目标操作
603unordered_map新增28-A2-1理解哈希函数的设计目标(均匀、稳定、快速)与常见方法:除留余数、乘法哈希、以及字符串/结构的组合哈希;介绍位扰动减少低位聚集。
604unordered_set新增28-A2-2掌握双哈希(用两个独立哈希函数降低冲突/碰撞)与布隆过滤器(多个哈希位构成的位数组,支持高效近似“可能存在/一定不存在”)。
605计数哈希新增28-A2-3掌握 Rabin-Karp:对模式串与文本每个长度为 m 的窗口计算滚动哈希,哈希相等再逐字符确认,从而在平均 O(n) 完成多模式/子串匹配。
606去重新增28-A2-4理解一致性哈希:把节点与键都哈希到同一个圆环上,键沿顺时针找最近节点;引入虚拟节点使负载均衡,常用于分布式缓存扩容。
607哈希映射新增28-A2-5综合运用哈希:在查重、计数、缓存、字符串判等、集合判同等场景中正确选择哈希结构,并理解其时间/空间权衡与碰撞应对。