Back

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

There are quite a few algorithms the students need to master in order to be successful in the USACO contests. The lecture courses teach those algorithms. Live online lecture courses are offered several times a year. Please subscribe to our newsletter to get notified when a new course is offered. Live online courses are usually once per week. The teacher and the students meet at a pre-arranged time via zoom. After the lesson, there are homework questions for the students to practice. When the students work on the homework questions, the solutions are judged in real time so the students can know if their solutions are good or not. 

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.

We strongly recommend every student to take the basic C++ course and earn a certificate before they start our silver level trainings. The certificate of finishing this course will get you a coupon that can take $75 off bronze level course tuition. So it is also a very good idea to take the basic C++ course before taking bronze level courses.

Please read this article to see why you should switch to C++ as early as possible.

lesson 1

Basic input and output
Variable declarations, assignments
Basic mathematical operations
Control Statements (if, else if, else)

lesson 2

Looping, array, string

lesson 3

Sorting array
2-Dimensional array
Advanced string manipulation
Functions and recursion

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

Course Map

close

Sign up to receive notifications about our new courses, interesting posts, popular books and much more!

We don’t spam! Read our privacy policy for more info.