The United States of America Computing Olympiad (USACO) – Overview

The United States of America Computing Olympiad (USACO) is a computer programming competition primarily for secondary school students in the United States.

The USACO offers four competitions during the academic year in four increasingly difficult divisions:

  • Bronze
  • Silver
  • Gold
  • Platinum

Participants advance through the levels by performing well in their current division. A week-long summer training camp is held where four students are selected from a group of 24 finalists to represent the United States at the International Olympiad in Informatics (IOI).

Momentum Learning USACO Curriculum

Momentum Learning is a premier institute offering comprehensive youth computer programming training. Explore a range of courses covering Python, Java, C++, Data Science, USACO, LeetCode and more. Momentum Learning helps students learn algorithms to prepare for the USACO contests. Our well-structured curriculum helps students first learn the basics of programming with Python, Java before moving into the more demanding USACO training.

All coding classes and camps are recorded and class materials including recordings will be available for 3 more months after the last day of the class/camp.

USACO Curriculum

Occasionally, dedicated students may be able to speed up the process by skipping some classes (if they meet the requirements of the class they want to take).

All USACO classes are offered in both Java and C++. We will focus on problem solving and algorithm and all class codes and homework solutions will be shown in both Java and C++.

In our USACO curriculum, we offer 30 hours/summer camp. The spring/fall classes are one semester (24 hours each). Students should start in the fall semester, with the difficulty level increasing as they move into the spring semester. USACO classes will focus on data structure, algorithms and techniques required to work out USACO contest problems.

Fall/Spring/Summer Classes (The new curriculum will start in Spring 2024)

  • Introduction to Java (AP CS A) & Intermediate Java (2 semesters – total 24 classes)
  • USACO Bronze 1 (Offered in the fall, spring and summer. We will cover similar topics in each semester but it will usually take students probably at least 2 terms to meet the prerequisite for the next level – USACO Bronze 2)
  • USACO Bronze 2 (Offered in the fall, spring and summer. We will cover similar topics in each semester but it will usually take students probably at least terms to meet the prerequisite for the next level – USACO Silver 1)
  • USACO Silver 1 (Offered in the fall, spring and summer. We will cover similar topics in each semester but it will usually take students probably at least 2 terms to meet the prerequisite for the next level – USACO Silver 2)
  • USACO Silver 2 (Offered in the fall, spring and summer. We will cover similar topics in each semester but it will usually take students probably at least terms to meet the prerequisite for the next level – USACO Gold)
  • USACO Gold A/B/C (3 semesters – total 36 classes)

As students move up the curriculum, the time required increases as well. Time required for the weekly homework:

  • Java: 2 hours per week
  • Bronze: 4 hours per week
  • Silver: 7 hours per week
  • Gold: 10 hours per week

As the contest difficulty level increased significantly in recent years, we are also offering intensive summer boot camps to help students.

Winter Bootcamps

Track Record
We have over 50 students qualified for USACO Gold and Platinum in the 2-3 years, including some qualifying for the USACO Training Camp.

FAQ’s

I am in 7th grade and can I take the Java class?

In general, students should have completed Algebra 1 before taking the java class. Also prior programming experience is preferred. However, highly motivated students can do well without the prerequisite.

What programming languages do you recommend for USACO?

For entry level students, we recommend Python or Java as the programming language. However, when they move to higher levels (USACO Gold or Platinum), they will have an option to use C++.

Why do you recommend students to learn Python or Java first instead of C++?

Python

  • Python’s syntax is clean and easy to read, making it accessible for beginners. This can be helpful when first learning algorithms and solving programming problems.
  • Python’s high-level syntax and dynamic typing enable faster coding. This allows more time to focus on solving the problem logically rather than worrying about complex syntax or managing data types.
  • While Python is great for Bronze-level problems, it can sometimes struggle with performance on higher levels (Silver, Gold, Platinum), where time complexity is more critical. For Bronze, however, Python is generally efficient enough to solve the problems within the time limits.
  • After mastering Python, it is relatively easy to transition to Java or C++.

Java

  • Most STEM students take AP Computer Science in high school which teaches Java. So it’s beneficial for them to learn Java beforehand.
  • For beginners, it’s easier to learn Java than C++.
  • For most of USACO contests, students are given 2 seconds per input case for C, C++, and Pascal, and 4 seconds per input case for Java and Python. So you will not see noticeable disadvantage of using Java (compared to C++) until you try to qualify for the USACO training camp.

Can I use Python for USACO contests?

Yes, you can, especially for the lower level contest (USACO Bronze). However, We do not recommend using Python since Python’s speed is slower compared to Java and C++.

I learned a little bit of C++. How easy is it for me to switch to Java?

For USACO competitions, it is not too difficult beginners to switch.  Keep in mind that USACO is more about algorithms than knowledge about specifics of the languages themselves. You can get by with knowing the basics of syntax and the basic data structures. It will take sometime to be comfortable with the memory management in C++, but overall, it is definitely a doable transition.

If Java's speed is slower than C++, will we be at disadvantage if we use Java?

For most of USACO contests, students are given 2 seconds per input case for C++, 4 seconds per input case for Java. Since Java’s speed is a slightly faster than half of C++ speed, students will not be at disadvantage for the lower levels (USACO Bronze, Silver, and Gold).

Can I use Java at IOI?

The short answer is NO. So if your goal is to make IOI, we’d recommend you to learn C++ at the Gold Level which should not be a very hard switch. Our USACO Gold class will cover certain topics to help students transition from Java to C++ if desired.

Ming Zhang, Ph.D.

Dr. Ming Zhang received an undergraduate degree in math from University of Science and Technology of China and obtained his Ph.D. from Rice University in Computer Science.

He has worked as an assistant professor at M.D. Anderson Cancer Center and a financial advisor at Morgan Stanley. With over 25 years of algorithm development and investment experience, Dr. Zhang now enjoys teaching students in mathematics and computer science.

In last 2-3 years, more than 50 of his students have been promoted to USACO Gold and Platinum (including the USACO Training Camp). Many of them are currently attending colleges such as Caltech, MIT, Harvard, Stanford, and Princeton. Congratulations to these amazing accomplishments.