What is USACO?
The United States of America Computing Olympiad (USACO) is an online computer programming competition, which serves as qualification for the International Olympiad in Informatics (IOI) in the United States. Primarily for secondary school students in the United States, the USACO offers four competitions (December, January, February, US Open) during the academic year. Participants compete in four increasingly difficult divisions (Bronze, Silver, Gold and Platinum), coding & submitting computer programs in one of four languages: C, C++, Java, and Python. Competitors advance through the levels by performing well in their current division.
Following the US Open (ran in April) competition, a week-long summer training camp is held in early summer (with around 24 top USACO participants invited as USACO “Finalists”). Four students are selected from a group of finalists to represent the United States of America (USA) at the International Olympiad in Informatics (IOI). All expenses are paid for the training camp and competition at IOI.
Click here to read an introduction to USACO in Chinese.
USACO Training Programs
Sparks Leaning academy offers best-in-class training classes for all 4 levels of USACO competition. We have two kinds of courses: lectures and practice courses.
Lectures
Besides live courses, we also have pre-recorded lecture courses. If you purchase a pre-recorded course, you will have access to all videos of the live course and homework for 6 months. You can learn at your own speed.
Practice Courses
Beside learning algorithms from lectures, the students need to practice with real problems. We offer live and pre-recorded practice courses for bronze, silver and gold levels. In the practice courses, students practice the real problems from recent USACO contests. The teacher will explain the problems during the zoom session.
All of our training classes use C++ as the language for instruction. To find out the reason why c++ is the best language in programming competition, you can read this article.
Basic and Advanced C++ Course for USACO
We teach all USACO courses in C++ language which the de-facto choice if you are serious in competitive programming. Since a lot of students have background in Java or Python and are feeling a little intimidated by a powerful language like C++, we create these courses to help these students to learn C++ quickly. Even if you don’t have any programming background, this course is good for you.
The basic C++ course has 3 lessons. Each lesson lasts 2 hours. The lessons are hands-on. The students will be coding during the lesson. After the lesson, there are homework questions to help the students to consolidate the knowledge learned.
The advanced C++ course has 4 lessons. Each lesson lasts 2 hours. The students will learn about the powerful C++ Standard Template Library (STL). The lessons are hands-on. The students will be coding during the lesson. After the lesson, there are homework questions to help the students to consolidate the knowledge learned.
If you don’t know how to code in C++, you have to learn basic C++ before attending our Silver level courses. You will have to learn the advanced C++ before attending our Gold level courses.
Please read this article to see why you should switch to C++ as early as possible.
lesson 1 |
Basic input and output |
lesson 2 |
Looping, array, string |
lesson 3 |
Sorting array |
lesson 1 | vector Algorithm: min_element, max_element, minmax_elements, count, unique, reverse |
lesson 2 | sorting and searching sort, find, binary_search, lower_bound, upper_bound struct, pair, tuple bitwise operations |
lesson 3 | set map stack list |
lesson 4 | queue deque priority_queue |
USACO Bronze
For beginners with minimum or no programming experience to start the USACO contest. We start from basic programming with C++ then gradually switch the focus to problem-solving. The students should have at least finished Algebra I in school math.
This class has 7 lessons. Each lesson lasts 2 hours. After each lesson, there is going to homework. The students will work on their homework questions via an online judging platform and get real time feedbacks.
Since we are going to use C++ as the programming language, it is better for the students to learn some C++ basics before starting USACO Bronze lessons. I recommend the following courses: Basic C++ for USACO (Live) Or Basic C++ for USACO (Pre-recorded)
or you can use this free course: https://www.codecademy.com/learn/learn-c-plus-plus
Lesson 1 | Basics of programming in C++ Create a C/C++ project in Visual Studio Basic input and output Variable declarations, assignments Basic mathematical operations |
Lesson 2 | Learn to program in C++ Control Statements (if, else if, else) |
Lesson 3 | Looping statements part 1 For, while, do while, break, continue Price of a loop |
Lesson 4 | Looping statements part 2 For, while, do while, break, continue Price of a loop Input and output framework in a code contest |
Lesson 5 | Array and string part 1 Array String as an array of characters Try to solve real contest problems: UVa272, 10082, etc. |
Lesson 6 | Array and string part 2 2-Dimensional array Advanced string manipulation Try to solve real contest problems: UVa401, 340, etc. |
Lesson 7 | Functions and recursion Declare function and struct Call function and pass parameters Recursion Try to solve real contest problems: UVa489, 133, etc. |
We have several practice courses for bronze level.
Practice with the real contest problems from Dec 2015 to March 2019.
Practice with the real contest problems from Dec 2019 to March 2022.
The teacher will explain the solution for each problem in detail.
USACO Silver
To help students to do well in the USACO silver division competition and be promoted to the Gold division. The student should have passed the Bronze division contest.
Since we are going to use C++ as the programming language, the students need to learn some C++ basics before starting USACO Silver lessons. I recommend the following courses: Basic C++ for USACO (Live) Or Basic C++ for USACO (Pre-recorded)
or you can use this free course: https://www.codecademy.com/learn/learn-c-plus-plus
Lesson 1 C++ STL part 1 Standard Template Library (STL) vector, sort and search Lesson 2 C++ STL part 2 Standard Template Library (STL) set, map, stack Lesson 3 C++ STL part 3 queue, deque, priority_queue Lesson 4 C++ STL part 4 list, stack, deque Lesson 5 Algorithm Part 1 Greedy, Huffman code Lesson 6 Algorithm Part 2 c++ pointers, tree, binary tree Lesson 7 Algorithm Part 3 Graph, Breadth-first search, Depth-first search Lesson 8 Algorithm Part 4 Simple enumeration Enumerate all permutations Enumerate all subsets Backtracking Lesson 9 Algorithm Part 5 Iterative deepening dfs Prefix sum Lesson 10 Algorithm Part 6 Sweep line algorithm
We will practice with the real contest problems from Dec 2019 to March 2021. The teacher will explain the solution for each problem in detail.
USACO Gold
To help students to do well in the USACO Gold division competition and be promoted to the Platinum division. The student should have passed the Silver division contest.
Lesson 1 | Graphs 1 Representation, Cycle Detection, Topological Sort |
Lesson 2 | Graphs 2 Shortest Paths(Dijkstra, Bellman-Ford, Floyd Warshall) |
Lesson 3 | DP 1 Basics and classic examples (LIS, CC, etc) |
Lesson 4 | DP 2 DP on tree/DAG, TSP |
Lesson 5 | DP 3 LCS, High level discussion |
Lesson 6 | Binary Search Ternary Search, Heap |
Lesson 7 | Geometry Line segment intersection, convex hull, etc. |
Lesson 8 | Strings Hashing, Miller-Rabin, KMP |
Lesson 9 | Data Structures 1 Prefix Sums, Fenwick Tree |
Lesson 10 | Data Structures 2 Segment Tree, Lazy Propagation |
We will practice with the real contest problems from Dec 2019 to March 2021. The teacher will explain the solution for each problem in detail.
USACO Platinum
To help students to do well in the USACO Platinum division competition and to have a chance to make the annual USACO training camp. The student should have passed the Gold division contest.
- Graph: topological sort
- Graph: cycle detection
- Graph: Euler path
- Graph: Shortest Paths (Dijkstra, Bellman-Ford, Floyd Warshall)
- Graph: union find
- Graph: minimum Spanning Tree (Kruskal, Prim)
- DP basics
- DP on tree/DAG
- Digit DP
- Bitmask DP
- Binary/Ternary Search
- Merging Sets
- Geometry: Line Segment Intersection
- Geometry: Point in Polygon
- Geometry: Sweep Line
- Geometry: Convex Hull
- String: Hashing
- String: Miller-Rabin
- String: KMP
- String: Z algorithm
- Prefix Sums
- Fenwick Tree
- Segment Tree: basic
- Segment Tree: Lazy Propagation
- 2-D Segment Tree
- Binary lifting and Sparse Table
- Square Root Decomposition and Mo’s Algorithm
- Lowest Common Ancestor
Lesson 1 | Review of Gold Topics |
Lesson 2 | Advanced Data Structures Multi-dimensional segment trees Mo’s algorithm Treaps |
Lesson 3 | Trees Heavy Light Decomposition Centroid Decomposition |
Lesson 4 | Strings Suffix and LCP array |
Lesson 5 | Advanced Dynamic Programming Common problems and techniques |
Lesson 6 | Dynamic Programming Optimizations 1 |
Lesson 7 | Dynamic Programming Optimizations 2 |
Lesson 8 | Strongly Connected Components |
Lesson 9 | Max Flow |
Lesson 10 | Miscellaneous Number Theory Interactive problems Randomized algorithms |