Lecture Notes · Competitive Programming I

USACO Bronze 闯关讲义

A Problem-Driven Course for the Bronze Division

你好!接下来大约 15 周,每周一次课,我们一起把 USACO Bronze 拿下。 你已经会写循环、会遍历数组,还学过二分查找和两种排序——起点比你想象的要高。

这份讲义不会先让你背一堆知识点。每一讲都从一道真正考过的题开始: 先自己试,卡住了再学“刚好够用”的新东西,然后用同类题巩固。全部学完,你会做过 50 多道 Bronze 真题。

每一讲怎么学 How Each Lesson Works

每一讲都按同样的五步走。习惯了这个节奏,你就能把注意力全放在题目上。

① 先挑战 自己想 15 分钟 ② 学新招 只学这题用得上的 ③ 一起解 思路 · 速度 · 代码 ④ 自己练 3–5 道同类真题 ⑤ 复盘 错在哪 · 学到啥 你在复盘里写下的难点,老师会用来挑下一讲的开场题
图 1 每一讲的五个步骤

第一步的“卡住”是故意安排的。研究发现:先自己挣扎一会儿再听讲解,比直接听讲解记得更牢。 没做出来完全正常,那 15 分钟会让你带着问题去学,听讲解时更容易“啊,原来如此”。

设计依据

“直接刷真题”对只有语法基础的学生容易变成长时间空转。本课程结合两条研究结论:

因此每讲的顺序是:先尝试 → 讲最少概念 → 精析例题 → 独立练习 → 复盘。

每次课的节奏 · 120 分钟

  1. 开场挑战
  2. 新概念
  3. 一起解
  4. 课堂练习老师在旁边看思路
  5. 收尾

课后与反馈

课后约 3 小时:每题先独立想 30 分钟,再逐级看提示。周末学生点“复制全部,发给老师”提交复盘,老师据此挑选下一讲的开场题。

你的起点 Where You Start

你已经会的东西都不会浪费,后面会反复用到。标着新的是 Bronze 需要、但你还没学过的。

表 1 已经会的 vs. 要学的
内容状态会在哪里用到
基本语法、循环、遍历会了每一讲
冒泡排序、选择排序会了第 8 讲:看看为什么 std::sort 快那么多
二分查找会了Bronze 很少考,第 8 讲顺带复习,升 Silver 时用得上
文件读写、估算速度新第 1–2 讲
vector、string、set、map新第 3、9 讲
枚举、排列、递归新第 5–6 讲

课程地图 Course Map

每学完一讲,就在这里打个勾,或者在那一讲最后点“我学完了”。两边是同步的。

做完了还想练?More Practice

每一讲只配了 3–5 道练习。如果某个知识点还不太熟,或者你做得很顺、想多来几道,就去 USACO Guide 题库。 它把几千道题按知识点、难度和来源整理好了,每道题还标着属于哪个学习模块。

怎么在题库里找题 How to Filter
  1. Section 选 Bronze,只看铜组范围的题。
  2. Modules 选和你刚学完的那一讲对应的模块(见下表)。
  3. Difficulty 先从 Very Easy、Easy 开始,做顺了再往上加。
  4. Source 里的 Bronze 和 Old Bronze 是 USACO 真题,CSES、CF 等是其他网站的题,也都值得做。
表 3 讲义和题库模块的对应关系
学完在 Modules 里选
第 1 讲 输入输出Input & Output
第 4 讲 模拟Simulation
第 5 讲 完全搜索(一)Basic Complete Search
第 6 讲 完全搜索(二)Complete Search with Recursion
第 7 讲 矩形几何Rectangle Geometry
第 8 讲 排序Introduction to Sorting
第 9 讲 set 与 mapIntroduction to Sets & Maps
第 10 讲 贪心Introduction to Greedy Algorithms
第 11 讲 找规律Ad Hoc Problems
第 12 讲 图论Introduction to Graphs

每道题下面都有 View Solution(题解)。规矩和讲义里一样:先自己想至少 30 分钟,卡住了再看,看完还要自己重新写一遍。 第 2、3 讲(复杂度、vector 与 string)是基础工具,题库里没有单独的模块,它们会出现在后面每一类题里。

讲义里的小工具 Interactive Parts

讲义不只是拿来读的,里面有不少可以点的东西:

你的勾选和笔记都只存在这台设备的浏览器里。换电脑或清空浏览器数据会丢失,记得复盘写完就发给老师。

关于比赛 About the Contest

USACO 每个赛季在网上办几场比赛。Bronze 每场 3 道题,限时几个小时,按通过的 测试点 给分,满分 1000。 分数够了就能升到 Silver。比赛规则这几年有调整,具体以 usaco.org 当季公告为准。 比赛可以用 C++ 和标准库,所以 vector、sort、set、map 都是你的武器。

参考资料

  1. USACO 官方网站:历年试题与赛制公告。usaco.org
  2. USACO Guide:Bronze 学习模块与题库。usaco.guide/bronze · usaco.guide/problems
  3. Laaksonen, A. Competitive Programmer's Handbook.
  4. Sweller, J., & Cooper, G. A. (1985). The use of worked examples as a substitute for problem solving in learning algebra. Cognition and Instruction, 2(1), 59–89.
  5. Kapur, M. (2008). Productive failure. Cognition and Instruction, 26(3), 379–424.

题目核对

✓ 第 1–4 讲的题目来源与链接已对照 usaco.org 核对;其余讲次在写作时核对。