← 竞赛体系
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 | 能理解“如果…就…否则…”的决策逻辑。 | |
| 10 | if / else01-A1-10 | 能写出 if / else 让程序做选择。 | |
| 11 | switch01-A1-11 | 能理解“多分支选择”——根据一个值选多种情况之一。 | |
| 12 | for01-A1-12 | 能使用 for 循环把一件事重复做 N 次。 | |
| 13 | while01-A1-13 | 能使用 while 在条件满足时不断重复。 | |
| 14 | do while01-A1-14 | 能理解“先做一次,再判断要不要继续”的循环。 | |
| 15 | break01-A1-15 | 能使用 break 立即跳出循环。 | |
| 16 | continue01-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 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 226 | DFS 基础10DFS-A1-1 | 掌握深度优先搜索:用递归(或栈)沿着一条路走到底再回溯,遍历所有状态/节点。 | |
| 227 | 图 DFS10DFS-A1-2 | 用 DFS 判断两点是否连通、统计连通块个数,理解“从一个点能到达的所有点”构成连通块。 | |
| 228 | 树 DFS10DFS-A1-3 | 用 DFS 回溯系统地枚举所有方案(全排列、子集),并在递归返回前“恢复现场”以尝试其他分支。 | |
| 229 | 网格 DFS10DFS-A1-4 | 用 DFS 的三色标记(白/灰/黑)检测有向图是否存在环:遇到“灰色”祖先说明有回边即环。 | |
| 230 | Flood Fill10DFS-A1-5 | 用 DFS(逆后序)求出有向无环图的拓扑排序:每次离开节点时把它加入答案头部。 | |
| 248 | BFS10BFS-A1-1 | 掌握广度优先搜索:用队列逐层扩展,先访问离起点近的节点,适合求最短路与层序遍历。 | |
| 249 | 网格 BFS10BFS-A1-2 | 用 BFS 求无权图(边权均为 1)从起点到各点的最短距离,首次访问即定距,避免重复入队。 | |
| 250 | 最短步数10BFS-A1-3 | 掌握多源 BFS:把所有起点同时入队(距离 0),一次 BFS 即求每个点到最近起点的距离。 | |
| 251 | Flood Fill10BFS-A1-4 | 在网格上用 BFS(Flood Fill)求连通块大小、数量与最远格,理解“四连通/八连通”的邻居扩展。 |
数据结构
10 个标签 · 10 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 263 | 数组11线性结构-A1-1 | 掌握数组:连续存储、随机访问 O(1)、按下标读写,是其他数据结构的基础。 | |
| 264 | vector11线性结构-A1-2 | 掌握 C++ vector(动态数组):自动扩容、尾部增删 O(1)、随机访问,是可变长数组。 | |
| 265 | stack11线性结构-A1-3 | 掌握栈:后进先出(LIFO),支持压栈/弹栈/取顶,常用于括号匹配、DFS。 | |
| 266 | queue11线性结构-A1-4 | 掌握队列:先进先出(FIFO),支持入队/出队/看队首,常用于 BFS、缓冲。 | |
| 267 | deque11线性结构-A1-5 | 掌握双端队列 deque:两端都能 O(1) 增删,兼具栈与队列功能,常用于滑动窗口。 | |
| 268 | priority_queue11线性结构-A2-1 | 巩固栈的“后进先出”:用栈判断括号是否匹配,并理解中缀转后缀后用栈求值。 | |
| 269 | set11线性结构-A2-2 | 理解循环队列:用定长数组 + 头尾指针(取模)实现 O(1) 入队出队,区分“满”与“空”。 | |
| 270 | map11线性结构-A2-3 | 掌握双端队列:两端都可 O(1) 入队/出队,用于滑动窗口、单调队列等进阶场景。 | |
| 271 | unordered_set11线性结构-A2-4 | 掌握单调栈:维护栈内元素单调递增/减,在线性时间内求“左边/右边第一个更大(更小)元素”。 | |
| 272 | unordered_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 | 理解哈希表:通过哈希函数把键映射到桶;不同键映射到同桶即冲突,介绍链地址法与开放寻址法两种解决思路。 | |
| 601 | set28-A1-2 | 对比哈希冲突的两种解法:链地址法(桶挂链表,删除方便)与开放寻址法(线性/二次/双重探测,缓存友好但易聚集)。 | |
| 602 | map28-A1-3 | 掌握字符串滚动哈希:把字符串视作 P 进制数模大素数,配合前缀哈希可在 O(1) 比较任意子串是否相等,用于 Rabin-Karp 与字符串判重。 |
