Breakout Mentors prides itself on personalizing coding education for each student’s interests and abilities. This can be 8 year-olds doing Scratch drag-and-drop programming, but also high school students who have been coding for years.
As our students advance, they are constantly in need of new challenges. Whether that is a large-scale project with a thousand lines of code, or learning advanced Computer Science algorithms and data structures. One of the most interesting application of algorithms and data structures is to solve competitive programming problems. Think of them as little puzzles that can only be solved by code!
Since 2019 we have been training students for USACO programming competitions. This is perfect if your son or daughter has been coding for years and is up for a fun challenge.
What is USACO?
USACO stands for United States of America Computing Olympiad, and it is a series of contests ultimately used to select high school students to represent the USA in international competition. If you are familiar with the IMO (International Mathematics Olympiad) or the AMC contests (American Mathematics Competitions) USACO is the equivalent for programming.
Any age can participate and advance the prestigious levels from Bronze, Silver, Gold, to Platinum. Only a few thousand US high school students each year reach Silver and only a few hundred reach Gold!
It is an impressive measuring stick to prove your coding and Computer Science knowledge to colleges and internships. Compared to the tens of thousands of students who take AP CS A, any USACO success is extremely exclusive. That’s why we recommend all high school students who know how to code to give it a try.
What is a Programming Contest?
Programming contests have various formats and flavors. USACO is an algorithmic contest, more commonly known as the broader term “competitive programming”.
Competitive programming consists of a wide variety of topics that test knowledge of algorithms and data structures. You are given a set of problems to solve, for example:
- Given a list of numbers, output the number of even numbers.
- Given a ledger of strings denoting the name of a voter, and the name of a candidate, output which candidate has the most votes.
- You are given a list of pairs of names that denote friendships of people. If person A is friends with person B, and person B is friends with person C then person A is also friends with person C. Answer a list of Q questions of the form, given two people X and Y, are they friends.
As these puzzles become more difficult, you face the challenge of creating a program that can give the answer fast enough. Almost any problem can be solved with a brute force solution — but you must learn how to analyze the speed of your program and ensure it will pass in a time limit by using more efficient algorithms like binary search.
These contests are exhilarating to compete in. There’s no better feeling than seeing the green “Accepted” result come back after hours of thinking and coding!
And they are fun to collaborate with friends on solving interesting problems. There are many high school clubs dedicated to training for competitions. Plus, there are some non-USACO events that are designed for teams to work together.
Overview of USACO
There are 4 USACO contests each year which can be done online in the comfort of your own home. The first 3 are “monthlies” and are in December, January, and February. Each contest is 4 hours long, and usually consists of 3 problems to solve. The 4th contest is called the “US Open” and is in March. The only difference with this contest to the others is that it is 5 hours long, and the 3 problems are slightly harder.
On the USACO website, you will upload your code file. Using Python or Java is popular for Bronze division, whereas Java or C++ is best for the higher divisions. The USACO grader will run your code, recording how much memory and how long it takes, in addition to if you got the right answer. There are ten test inputs it will run, which get increasingly difficult. Even if you can’t pass all test inputs, you can receive partial points for the test cases you did pass.
After the weekend, the USACO organization will decide the passing score for the contest. If you hit that score or above, then the next contest you can compete in the next division up.
Trying It Out
If these kinds of puzzles seem interesting to you and you enjoy being part of a tight knit community with tons of contests, give it a try. We prepared a list of problems specifically for people who have never tried a competition before.
These use a different competitive programming website called Codeforces. The idea is identical to USACO, so it is a great place to try out problems. Plus, on Codeforces each problem is given a difficulty number, which allows for even greater control in your training than the broad USACO divisions.
- Create a Codeforces account. Codeforces is another online platform that has thousands of problems, learning materials, and live contests a few times a week.
- Email email@example.com your Codeforces username. This is so that we can invite you to try out some custom problems we’ve put together!
- You will receive an email once you’ve been given access. The email will contain a link to the contest.
- Click ‘Enter >>’ to view the list of problems. Click on a problem to read and then submit a solution in any programming language.
- If you get stuck or have issues, please email firstname.lastname@example.org.
If you want to simply read more about USACO, we recommend the USACO Guide website. There are many resources on there that cover the algorithms and data structures you need to know to advance.
Just keep in mind, the algorithms are only one piece of the puzzle. You also need the USACO problem solving insights, which are best learned 1-on-1 with an experienced mentor!
Breakout Mentors trains students for competitive programming across a wide range of skill levels in our USACO Competitive Programming Academy. This includes middle school students who aren’t even ready for USACO Bronze difficulty problems yet.
If you think you might be interested in trying competitive programming, please contact us to discuss the specifics of your son or daughter.