← 竞赛体系
COURSE · 课程路径

USACO Bronze

CURRICULUM

课程大纲 · 能力地图

按「大类 → 难度 → 前后顺序」组织,共 80 个能力标签。 同一大类内循序渐进,绿色为已备教案、可直接进入学习;灰色为编写中。

程序设计基础

17 个标签 · 17 已就绪
序号知识点能力目标操作
1顺序结构01-A1-1能按“先做 A、再做 B、最后 C”的顺序写出步骤,并理解顺序改变可能改变结果。
2变量01-A1-2能声明变量、赋值并在程序中修改它的值。
3常量01-A1-3能区分“会变的值”和“永远不变的值”,并用常量表达固定数字。
4基本数据类型01-A1-4能区分整数、小数、文字三种最基本的数据类型。
5算术运算01-A1-5能正确使用 + - * / 和取模 % 进行计算,并理解“先乘除后加减”的优先级。
6关系运算01-A1-6能使用 > < >= <= == != 比较大小,得到“真 / 假”。
7逻辑运算01-A1-7能使用 and / or / not 把多个条件组合起来。
8输入输出01-A1-8能使用 input 接收用户输入,并用 print/cout 输出结果。
9条件判断01-A1-9能理解“如果…就…否则…”的决策逻辑。
10if / else01-A1-10能写出 if / else 让程序做选择。
11switch01-A1-11能理解“多分支选择”——根据一个值选多种情况之一。
12for01-A1-12能使用 for 循环把一件事重复做 N 次。
13while01-A1-13能使用 while 在条件满足时不断重复。
14do while01-A1-14能理解“先做一次,再判断要不要继续”的循环。
15break01-A1-15能使用 break 立即跳出循环。
16continue01-A1-16能使用 continue 跳过本次、进入下一次循环。
17基础调试01-A1-17能看懂报错信息,定位并修正常见错误。

复杂度与算法分析

5 个标签 · 5 已就绪
序号知识点能力目标操作
43什么是算法02-A1-1理解“算法”的定义与基本特征,能区分“会做”和“有步骤、可重复地做”。
44程序执行过程02-A1-2理解代码从编写到运行的流程,以及“语句逐条执行、函数调用、输入输出”在计算机中的基本过程。
45基础时间复杂度02-A1-3建立“用操作次数随输入规模 n 的增长趋势来衡量算法快慢”的初步概念(大 O 思想)。
46常数复杂度 O(1)02-A1-4理解 O(1):无论输入多大,操作次数都固定不变,是最高效的复杂度。
47线性复杂度 O(n)02-A1-5理解 O(n):操作次数随输入规模 n 成正比增长,常见于“遍历一遍”的算法。

模拟与枚举

13 个标签 · 13 已就绪
序号知识点能力目标操作
73基础模拟03-A1-1理解“模拟”这一基础算法思想:按题目/过程的原样描述,一步步把流程用代码复现出来。
74数值模拟03-A1-2掌握“按数值规则逐步演算”的模拟:根据给定公式/规则,循环更新数值直至结束。
75过程模拟03-A1-3掌握“按步骤/阶段推进”的过程模拟:用状态机思想,依输入或规则在不同阶段间切换。
76条件模拟03-A1-4掌握“带分支判定的模拟”:在模拟过程中根据条件选择不同操作(if/多分支),忠实复现含规则的流程。
77简单枚举03-A1-5掌握“枚举(穷举)”思想:把所有可能情况一一尝试,找到满足条件的答案。
78分类讨论03-A1-6掌握“分类讨论”思想:把问题按条件分成若干情况,对每种情况分别处理,避免遗漏。
79多状态模拟03-A2-1掌握"多状态模拟":用多个状态变量同时刻画一个过程,按规则逐步推进直到结束。
80数组模拟03-A2-2掌握"用数组来模拟":把一排对象放进数组,通过下标访问和修改,完成排队、摆放、计数等过程。
81字符串模拟03-A2-3掌握"用字符串来模拟":把过程看成对一串字符的逐个处理,按规则生成或修改字符串。
82二维网格模拟03-A2-4掌握"二维网格模拟":用二维数组表示棋盘、地图、矩阵,通过 (行,列) 坐标更新状态。
83多重枚举03-A2-5掌握"多重枚举":同时枚举两个或更多变量(嵌套循环),在组合空间里找满足条件的解。
84枚举优化03-A2-6掌握"枚举优化":通过缩小枚举范围、提前剪枝、利用单调性,让枚举从 O(n²) 降到可接受的复杂度。
85枚举边界03-A2-7掌握"枚举边界":小心循环的开闭区间,避免漏解(off-by-one)或多解,尤其注意等号与最大/最小取值。

数组与基础预处理

7 个标签 · 7 已就绪
序号知识点能力目标操作
99一维数组04-A1-1理解一维数组:连续编号的同类型容器,能用下标读写,知道数组长度是固定的(静态数组)或可变(动态数组)。
100二维数组04-A1-2理解二维数组:用"行、列"两个下标表示表格/矩阵,掌握声明、读写与遍历。
101数组遍历04-A1-3掌握数组遍历:用循环依次访问每个元素,完成查找、打印、变换等任务。
102数组统计04-A1-4掌握数组统计:在遍历数组时计算总和、平均值、个数等汇总信息。
103最大值/最小值04-A1-5掌握在数组中找最大值/最小值,以及对应的下标(位置)。
104计数数组04-A1-6掌握计数数组(桶):用数组下标表示"值",数组元素表示"出现次数",高效统计频率。
105标记数组04-A1-7掌握标记数组(visited/flag):用布尔或整型数组记录"某格/某人/某值是否已被处理过",防止重复或遗漏。

排序

5 个标签 · 5 已就绪
序号知识点能力目标操作
124冒泡排序05-A1-1理解冒泡排序:反复比较相邻元素,把"大的"一步步换到右边,像气泡上浮一样把最大值冒到末尾。
125选择排序05-A1-2理解选择排序:每轮从"未排序部分"挑出最小值,放到已排序部分的末尾。
126插入排序05-A1-3理解插入排序:像整理手牌一样,把每个新元素插入到前面已排好序的部分中的正确位置。
127排序思想05-A1-4理解"为什么需要排序"以及基于比较的排序的基本思想:通过元素间的比较与交换,把无序变有序。
128稳定性05-A1-5理解排序的"稳定性":相等元素在排序后是否保持原有相对顺序;并记住常见排序是否稳定。

查找与二分

3 个标签 · 3 已就绪
序号知识点能力目标操作
146顺序查找06-A1-1掌握顺序查找:从第一个元素开始逐个比较,直到找到目标或扫完整个数组。适用于未排序数据。
147有序数组查找06-A1-2掌握在"已升序数组"中查找:仍可顺序扫描,但一旦遇到比目标大的元素即可提前停止。
148二分查找基础06-A1-3掌握二分查找:在已升序数组中,每次取中点比较,把搜索区间缩小一半,复杂度降到 O(log n)。

贪心

4 个标签 · 4 已就绪
序号知识点能力目标操作
205贪心思想09-A1-1理解贪心:每一步都做"当前看起来最优"的选择,期望得到全局最优。
206局部最优09-A1-2理解"局部最优"与"全局最优"的关系,学会判断一个问题能否贪心。
207简单贪心09-A1-3通过经典简单贪心题(区间选点、拼接等)巩固贪心套路。
208直接选择09-A1-4掌握"直接选择"型贪心:每步直接挑当前最优元素(如选择排序、选最大可用)。

搜索

9 个标签 · 9 已就绪
序号知识点能力目标操作
226DFS 基础10DFS-A1-1掌握深度优先搜索:用递归(或栈)沿着一条路走到底再回溯,遍历所有状态/节点。
227图 DFS10DFS-A1-2用 DFS 判断两点是否连通、统计连通块个数,理解“从一个点能到达的所有点”构成连通块。
228树 DFS10DFS-A1-3用 DFS 回溯系统地枚举所有方案(全排列、子集),并在递归返回前“恢复现场”以尝试其他分支。
229网格 DFS10DFS-A1-4用 DFS 的三色标记(白/灰/黑)检测有向图是否存在环:遇到“灰色”祖先说明有回边即环。
230Flood Fill10DFS-A1-5用 DFS(逆后序)求出有向无环图的拓扑排序:每次离开节点时把它加入答案头部。
248BFS10BFS-A1-1掌握广度优先搜索:用队列逐层扩展,先访问离起点近的节点,适合求最短路与层序遍历。
249网格 BFS10BFS-A1-2用 BFS 求无权图(边权均为 1)从起点到各点的最短距离,首次访问即定距,避免重复入队。
250最短步数10BFS-A1-3掌握多源 BFS:把所有起点同时入队(距离 0),一次 BFS 即求每个点到最近起点的距离。
251Flood Fill10BFS-A1-4在网格上用 BFS(Flood Fill)求连通块大小、数量与最远格,理解“四连通/八连通”的邻居扩展。

数据结构

10 个标签 · 10 已就绪
序号知识点能力目标操作
263数组11线性结构-A1-1掌握数组:连续存储、随机访问 O(1)、按下标读写,是其他数据结构的基础。
264vector11线性结构-A1-2掌握 C++ vector(动态数组):自动扩容、尾部增删 O(1)、随机访问,是可变长数组。
265stack11线性结构-A1-3掌握栈:后进先出(LIFO),支持压栈/弹栈/取顶,常用于括号匹配、DFS。
266queue11线性结构-A1-4掌握队列:先进先出(FIFO),支持入队/出队/看队首,常用于 BFS、缓冲。
267deque11线性结构-A1-5掌握双端队列 deque:两端都能 O(1) 增删,兼具栈与队列功能,常用于滑动窗口。
268priority_queue11线性结构-A2-1巩固栈的“后进先出”:用栈判断括号是否匹配,并理解中缀转后缀后用栈求值。
269set11线性结构-A2-2理解循环队列:用定长数组 + 头尾指针(取模)实现 O(1) 入队出队,区分“满”与“空”。
270map11线性结构-A2-3掌握双端队列:两端都可 O(1) 入队/出队,用于滑动窗口、单调队列等进阶场景。
271unordered_set11线性结构-A2-4掌握单调栈:维护栈内元素单调递增/减,在线性时间内求“左边/右边第一个更大(更小)元素”。
272unordered_map11线性结构-A2-5掌握单调队列:用 deque 维护窗口内元素的单调位置,O(n) 求滑动窗口最大值/最小值。

字符串算法

4 个标签 · 4 已就绪
序号知识点能力目标操作
580字符串遍历27-A1-1掌握字符串遍历:逐字符处理字符串,能按位置取字符、按条件筛选与拼接。
581字符统计27-A1-2掌握字符统计:统计字符串中字母、数字、各类字符的出现次数与频率。
582字符串模拟27-A1-3掌握字符串模拟:把过程建模为对字符串/字符序列的逐步变换与判断。
583字符串排序27-A1-4掌握字符串排序:对字符串中的字符排序,以及对一组字符串按字典序排序。

哈希

3 个标签 · 3 已就绪
序号知识点能力目标操作
600哈希表概念28-A1-1理解哈希表:通过哈希函数把键映射到桶;不同键映射到同桶即冲突,介绍链地址法与开放寻址法两种解决思路。
601set28-A1-2对比哈希冲突的两种解法:链地址法(桶挂链表,删除方便)与开放寻址法(线性/二次/双重探测,缓存友好但易聚集)。
602map28-A1-3掌握字符串滚动哈希:把字符串视作 P 进制数模大素数,配合前缀哈希可在 O(1) 比较任意子串是否相等,用于 Rabin-Karp 与字符串判重。