Table of Contents
Q: What is the USACO?Q: How Are USACO Contests Scored?Q: I've created a USACO account. How do I participate in an upcoming contest?Q: Do I need to participate in the USACO December contest before participating in the other contests?Q: What language should I use for USACO?Q: How do I prepare for USACO?Q: What's the best resource to get better at USACO?Q: I'm stuck. Where can I get help for USACO?Q: When should I read the USACO analyses?Q: Should I implement every problem that I solve?Q: What topics do I need to know for each of the USACO divisions?Q: Where can I find more practice problems?Q: Should I also use the USACO Training Pages?Q: What Codeforces rating corresponds to each of the USACO divisions?I have a question that isn't answered here.Closing ThoughtsUSACO FAQs
Authors: USACO Finalists, Darren Yao
Answers to frequently asked questions about the USA Computing Olympiad.
Table of Contents
Q: What is the USACO?Q: How Are USACO Contests Scored?Q: I've created a USACO account. How do I participate in an upcoming contest?Q: Do I need to participate in the USACO December contest before participating in the other contests?Q: What language should I use for USACO?Q: How do I prepare for USACO?Q: What's the best resource to get better at USACO?Q: I'm stuck. Where can I get help for USACO?Q: When should I read the USACO analyses?Q: Should I implement every problem that I solve?Q: What topics do I need to know for each of the USACO divisions?Q: Where can I find more practice problems?Q: Should I also use the USACO Training Pages?Q: What Codeforces rating corresponds to each of the USACO divisions?I have a question that isn't answered here.Closing ThoughtsQ: What is the USACO?
The USA Computing Olympiad is a national programming competition that occurs four times a year, with December, January, February, and US Open (March) contests. The regular contests are four hours long, and the US Open is five hours long. Each contest contains three problems. Solutions are evaluated and scored against a set of predetermined test cases that are not visible to the student. There are four divisions of contests: Bronze, Silver, Gold, and Platinum. After each contest, students who meet the contest-dependent cutoff for promotion will compete in the next division for future contests.
Q: How Are USACO Contests Scored?
Resources | ||||
---|---|---|---|---|
USACO | more about contest format |
USACO contests are scored out of points. Each problem is worth points. All test cases for a problem are weighted equally, except the sample test case(s), which are worth zero points. For example, if problem 1 has 10 non-sample test cases, then you will get points for each non-sample test case that you get correct for problem 1.
At the end of the contest, a "cutoff score" for each division is determined based on the difficulty of the contest. If your score is at least the "cutoff score" for your division, then you get promoted to the next division. Historically, the cutoff score has always been a multiple of points in the range (typically ).
If you get a perfect score during the contest (i.e., you fully solve all three problems), then you get an in-contest promotion, where you immediately get promoted to the next division. You can start the next division's contest whenever you want during the contest window; your four- or five-hour timer resets when you start the contest.
Q: I've created a USACO account. How do I participate in an upcoming contest?
The USACO homepage will update with instructions on how to participate once the contest window begins.
Q: Do I need to participate in the USACO December contest before participating in the other contests?
No.
Q: What language should I use for USACO?
The most popular languages that USACO supports are C++, Java, and Python. In general, we recommend the following:
- If you already know one or more of these languages, just use the one you are most comfortable with.
- If you don't know any of these languages, you might as well start with C++, as C++ users generally don't need to worry as much about their solutions being a constant factor too slow. Furthermore, most modules currently lack Java and Python support.
Don't overthink choosing a language -- you can always change languages later!
We cover choosing a language in more detail in our "Choosing a Language" module.
Q: How do I prepare for USACO?
Learn algorithms, do practice problems, and reflect on why you're missing problems. Make sure you learn from every problem you do, and you'll improve over time. If you're looking for a guided roadmap to improve at USACO, check out the USACO Guide (that's this site!).
If you want to get better at USACO, the key thing is to do more practice!
Q: What's the best resource to get better at USACO?
We made the USACO Guide specifically to provide high-quality resources to help people get better at USACO; we encourage you to give it a shot! We also list additional resources that you may find helpful. Additionally, USACO has its own resources page.
Q: I'm stuck. Where can I get help for USACO?
We recommend you go to the
(unofficial) USACO Forum to get help when you're
stuck. Alternatively, you can join the
(unofficial) USACO Discord Server. They
have channels called #cp-discussion
and #cp-help
dedicated to questions
about competitive programming.
Q: When should I read the USACO analyses?
It really comes down to personal preference; there's no right or wrong answer -- do what works for you! With that being said, we've asked numerous top USACO competitors what they think about this question. This module lists their thoughts on how to effectively practice for USACO.
Q: Should I implement every problem that I solve?
Usually, yes (unless the problem is significantly too easy for you). Solving competitive programming problems consists of two parts: coming up with the algorithm, and implementing the algorithm. You should implement so that you practice both parts.
Q: What topics do I need to know for each of the USACO divisions?
While there is no official USACO syllabus, we've compiled topics for each division from historical contests:
Q: Where can I find more practice problems?
Codeforces -- you can search by tag, difficulty level, etc.
For additional sources of problems, check the contests page.
USACO Training Pages?
Q: Should I also use theYou might find them useful. Keep in mind that they:
- Are not beginner friendly, as noted by Rob Kolstad himself here.
- Don't allow you to view the analysis for a problem until you solve it. Don't allow you to move past a section until you've solved all the problems in it.
- Though some people consider this a plus (as mentioned here).
- Don't cover many topics that appear frequently in current contests (such as segment trees), as noted here.
Q: What Codeforces rating corresponds to each of the USACO divisions?
Codeforces rating and USACO divisions can't be directly compared since CF emphasizes solving more problems in a shorter time period (CF contests have 5-8 problems in 2-3 hours, while USACO contests have 3 problems in 4-5 hours). However, here are some very rough estimates:
- USACO Bronze competitors are probably <1300 rated on CF, and Bronze problems correspond to 900-1500 rated CF problems.
- USACO Silver competitors are probably 1200-1500 rated on CF, and Silver problems correspond to 1200-1900 rated CF problems.
- USACO Gold competitors are probably 1500-1800 rated on CF, and Gold problems correspond to 1500-2200 rated CF problems.
- USACO Platinum competitors are probably 1650+ rated on CF, and Platinum problems correspond to 1900+ rated CF problems. (Note that at the Platinum level there is a lot of variation in CF ratings.)
Again, CF problems and contests are significantly different from USACO!
I have a question that isn't answered here.
You can probably find the answer at usaco.org or by googling. Answers to additional FAQs can be found here, though some of them are out of date.
You can also ask questions on the USACO Forum.
Closing Thoughts
We hope you've found this FAQ useful! Best of luck on your competitive programming journey!
Module Progress:
Join the USACO Forum!
Stuck on a problem, or don't understand a module? Join the USACO Forum and get help from other competitive programmers!