BCC Beginner's Handbook to USACO

What is “USACO”?

USACO stands for “United States of America Computing Olympiad”. It is the most important programming competition in the US, primarily for high school students. ( official website: www.usaco.org)

Why you should compete in USACO?

If you’re a parent, your first concern may be how useful competitive programming is to future college and job prospects. Many successful competitive programmers attend top rated CS schools such as CMU, MIT and Stanford, and often land high-earning jobs in fields like quantitative finance or investment banking. Compared to other areas such as math or piano, competitive programming is a smaller community, making it overall less difficult to stand out. Competitive programming also builds practical programming skills, as it’s a great way to practice implementing algorithms and designs. The average white collar tech worker can likely only consistently qualify for USACO silver–the second lowest level–so even mastering the basics of competitive programming can give students a massive advantage later. In addition, competitive programming feels very rewarding, and many competitors pursue it as a passion in their free time in lieu of other entertainment. The community is very friendly and tight-knit, and is very supportive despite the competitive nature.

USACO competition details

Progression System
USACO has four main levels: Bronze, Silver, Gold, and Platinum. All competitors automatically start in bronze. After each competition, competitors that score high enough (usually above 700-800 out of 1000 points) are promoted to the next level. Additionally, competitors that earn a perfect score on one level during a competition are immediately promoted and can start working on the next level right away.

Promotions are permanent: students cannot ever demote from a level once they have reached it, even if they do not participate or perform poorly in a competition. However, a poor showing at the USACO Platinum level may impact a competitor’s ability to be invited to the USACO training camp.

If a competitor earns consistently high scores in USACO Platinum throughout the year, they earn an invitation to the USACO training camp. There, competitors train under top instructors and study together.

Finally, the very best camp participants are selected to represent the US in the IOI, short for “International Olympiad in Informatics”. This is an international competition and the very highest level of competitive programming.

Scoring System
USACO competitions always have three problems, each with some number of test cases (most commonly 10). Competitors receive points for each test case their program correctly solves; thus, earning partial credit is possible on a problem. Test cases within the same problem are usually worth the same amount of points, but may differ across problems. Completely solving all three problems is always worth 1000 points.

Example: USACO Bronze often has three equally weighted problems, each with 10 test cases. Thus, each test case is worth 33.33 points. If a competitor solves all of problem 1, two test cases on problem 2, and nothing on problem 3, they earn (33.33 * 10) + (33.33 * 2) + (33.33 * 0) = 400 points out of a total 1000.

A test case is considered “solved” if the program returns the correct output without breaking any limits. If the program uses too much time, too much memory, causes an error, or otherwise returns an incorrect answer, it is not solved.

Some Competition Rules
Competitors must work alone; they may not discuss the problems with or get help from others until the competition is over. Competitors may also not consult any other resources such as textbooks or the internet, apart from syntax and libraries.

Competitors may not create more than one account.

There are no second chances for cheating.

A full list of rules and regulations are available on the USACO website.

How to compete in USACO

Competition Date, Place, and Time
The competition is held 4 times a year, once per month starting from late December through late March/early April. The late March/early April competition is called “US Open” and generally somewhat harder than the others.

The competition is fully online at usaco.org . Participants need an account, though no pre-registration is needed; participants may start at any time.

Each competition is open for a timeframe of approximately 4 days: for instance, the 2021 December contest was held between December 18 through December 21. Participants can take the competition in any continuous 4 hour period during this timeframe.

Writing and Submitting Code
Currently, USACO accepts programs written in C++/C++11/C++17, Java, and Python 2/Python 3. We personally recommend C++17/Java/Python 3, as they have more functionalities and problems can arise from using older languages.

Once a competitor believes they have solved a problem, they should save their code as a file. This can then be uploaded to a live online grading server, which will show them the results after processing their code.

A note on past problems: USACO currently uses standard I/O for input and output. However, prior to December 2020, USACO used file I/O for its problems. Thus, some guides on submitting your solutions may be out of date. We recommend you use training.usaco.org or usaco.guide as references for file formatting.

Cost
Participating in USACO is completely free. Competitors invited to the USACO training camp have most expenses paid for apart from travel.

Preparing for USACO

Learning a programming language
Aspiring competitors should start by familiarizing themselves with the basics of the programming language they want to compete in. For USACO Bronze and Silver, students need to learn up to methods, as well as some basic techniques such as recursion or iterating through an array. Many problems in USACO Gold and Platinum will additionally require the use of structs and classes.

Bay Coding Club offers classes in C++, Java, and Python.

Resources to get started

train.usaco.org: The official USACO training website. Formatted as a level-by-level progression system, unlocking a new topic once all problems from the previous one have been solved. Documentation is limited but thorough.

usaco.guide: An online resource created by former top competitors. Has extensive documentation of a lot of topics and problems, very useful for self-studying certain topics or just general practice.

Guide to Competitive Programming: A classic textbook recommendation. Most information is updated with newer versions and it provides a very comprehensive coverage of every level of topics, though it is also geared towards some competitions other than USACO.

BCC: The article would not be complete without some degree of self-promotion. We offer public and private USACO classes to suit every type of student.