See a list of video guides at the bottom of this FAQ!
Table of Contents:
1. What is the USACO?
The USA Computing Olympiad (USACO) is an online contest given to high school (or younger!) students competing on their ability to solve problems using computer programming.
2. Which students can try USACO?
Any student with intermediate knowledge in a programming language can try out the contest. You may find it difficult, but there’s no penalty for trying, and you can keep improving at your own pace!
KTBYTE students at CS01b or above are recommended to try it, starting at Bronze division. Our CS90, 91, and 92 courses provide students with additional lessons and practice opportunities for Bronze, Silver, and Gold divisions respectively.
3. Where do I take it?
The contest is entirely online. You can take it from anywhere you’ll have an internet connection and programming software, usually from home. Just sign into the website at www.usaco.org to get started anywhere.
4. When do I take it?
USACO gives their main contests during 4 weekends per year – see the dates at www.usaco.org. During these weekends spanning Friday through Monday, students can choose any time to start their personal timer for that contest weekend. The time per student per weekend is usually 4 hours, but sometimes 3 or 5.
5. How do I sign up?
Make a free account on the www.usaco.org site beforehand. You don’t need to register for a specific contest date ahead of time! Once you have an account, you can compete.
6. What else should I do to prepare?
You’ll probably want to look at some of the past problems at http://usaco.org/index.php?page=contests . Try submitting a solution or two on the website. Make sure the computer and work area you plan to use is ready to go. Check out our video guides at the bottom of this page to get help setting up the Eclipse IDE, create a solution for an example problem, and see how the website works.
You should also read the official rules before competing. Academic integrity matters! Click to view instructions!
7. How do I start a contest?
Log into your account at www.usaco.org . If it’s a contest weekend, you’ll see a button to get started on the front page!
8. What is the timing format of the contest?
Any time during the contest weekend, go to the website and click the button to start your personal contest timer of 3-5 hours. You’ll be told the exact time limit before starting; it’s usually 4 hours. You will then receive access to the contest problems. See http://usaco.org/index.php?page=instructions for the official description.
You can take breaks or stop early if you like, but once you’ve clicked the “start” button that weekend, your time will keep ticking until it expires – no pauses allowed. If you’re just checking it out, feel free to just spend as little or as much time trying it as you like. If you’re aiming to do well, try to plan ahead for a full block of time you can work without distraction!
9. How much does it cost?
USACO is completely free! Just sign up for an account and do some practice, and you’re ready to go.
10. Can I work in a group?
No. You must compete on a contest as an individual competitor, and working with other people during the contest is NOT ALLOWED. However, you can study and prepare with anyone you like! Please read http://usaco.org/index.php?page=instructions for the official academic integrity guidelines.
11. Do I have to be on a school team?
No! See “Can I work in a group” above – the live contest requires individual work anyway. Of course, It can be fun and valuable to study with other people at your school or in KTBYTE classes!
12. Do I get an award for competing?
There are no “prizes”, but you will receive recognition by advancing through the difficulty divisions offered, which will get your name listed in the contest results for the weekend that you advanced. Even being promoted by one or two divisions is very impressive! You can list this accomplishment on applications and resumes.
13. How do contest divisions work?
USACO has four divisions of competition, Bronze, Silver, Gold, and Platinum. All competitors start in Bronze division. After each contest weekend, you may be “promoted” to the next level with a sufficiently high score – usually getting about 600-800 out of 1000. You can also be instantly promoted in the middle of a contest weekend by getting a perfect score on all problems.
Each division is significantly more difficult than the previous one. It usually takes quite a lot of study, practice, and attempts to advance to a new level – as much as a year or more for each one.
USACO added the Platinum division in 2015. Before that point, each division was more difficult than it is now, approximately equivalent to “one step up” in terms of today’s divisions. For example, “old Bronze” problems are closest to “modern Silver” problem difficulty, in general.
14. How are contests scored?
Each of the 3-4 programs submitted are tested against 10 or more “test cases” – sets of data fed into your program with known results expected. You get credit for each test case that gives the correct results. There are 1000 points total for all problems in a division in one contest weekend.
You will lose credit on test cases if your program takes too long to run, takes up too much memory, or crashes, so the efficiency of your code is a factor! This is especially true in Silver division and above.
For an example of submitting and receiving feedback on a solution: Click to view video.
15. Is there any consequence to doing badly?
Nope, nada, zilch, none! It’s a great thing to check out no matter how well you do.
16. Can you ever be “demoted” from a division?
No! Once you’re promoted, you’ll be in that division as long as you keep using your www.usaco.org account – until you get promoted again, of course!
17. Can I compete in multiple divisions in one weekend?
Yes. With a perfect score in your current division (like Bronze), you will be immediately promoted to the next division (like Silver). You can then choose any time that same weekend to start the new division’s contest with a fresh timer.
18. What kinds of problems are in USACO?
USACO is an “algorithmic” contest, meaning it requires coming up with creative, systematic approaches to analyzing information, not just directly translating a description of a program into code. For instance, “find the position of the largest number in a list” is a very simple algorithmic problem, but “write down the commands to draw a circle and then a square” is not.
Look at http://usaco.org/index.php?page=contests to browse past contest problems!
19. What programming language does USACO use?
USACO accepts solutions in many languages, including Java, C++, and Python. Java and Python submissions get twice the time limit of C++ to account for their longer running times. However, Python is not recommended by USACO’s own description, because it tends to run more slowly than Java, and may have cases where even the best solution for a problem does not complete within the time limit.
We use Java for KTBYTE training. Java runs without having timing issues as long as students use efficient algorithms, and it is consistent with the AP Computer Science curriculum.
Solutions posted on the USACO website for students to learn from tend to be in C++ for older problems including most “training problems”, but Java has grown increasingly popular over time.
20. Are there any special Java considerations I should know about to program for USACO?
You may import any standard libraries installed with Java 8, such as java.util.* and java.io.*. You must use the “default package” for your Java files; there should not be a “package” line in your source code. See the official directions for Java here: http://usaco.org/index.php?page=instructions
Completing a problem requires reading and writing text files. We like the Scanner and PrintWriter classes for this, which are very easy to use – see our video guide to a simple problem: USACO_Basic_Guide.
Division specific topics:
- Bronze division problems can usually be solved using arrays, sometimes two-dimensional arrays, and occasionally classes or ArrayLists.
- Silver competitors should become familiar with standard data structures in the java.util package, such as List/ArrayList, Set/HashSet/TreeSet, Map/HashMap/TreeMap, Deque/ArrayDeque, and PriorityQueue, as well as the Comparator/Comparable interfaces.
- Gold competitors will often have to program their own data structures.
21. I’ve heard that other languages are faster than Java. Is that true?
C++ does run faster than Java, but USACO allows for twice as much time for Java programs. We have not found a problem that could not be completed in reasonable time using Java. We recommend using a language you’re comfortable with for learning. For students following the US Advanced Placement curriculum, this language is Java more often than not.
Other competitions may have different setups and may require using other languages. Remember, the real knowledge is in the algorithms, not the language. Learning C++ is a great idea, and we encourage you to do so if you have the time and the motivation!
22. What are the memory and time limits for Java programs?
As of December 2018:
- Check http://usaco.org/index.php?page=instructions for current limits.
- Each input test case is given “about” 4 seconds for Java, although this can differ between problems or test cases. Generally we have found that, for a worst-case input scenario, a rough estimate of 1 billion “operations” or more for your program will take too long, and 100 million or less is usually fine. Anywhere in between depends on the details.
- Each input case is given “about 256 MB” of memory to run. An array of 1 million integers takes up only 4 MB of memory (4 bytes * 1 million). We have found that time limits are almost always the limiting factor before memory limits, assuming a reasonable approach to storing data.
23. What’s the “US Open”?
The US Open is the last contest of the year open to all competitors. It follows the same format as the December-February contests, but is often slightly harder and sometimes has more problems and a higher time limit.
24. What’s the “Training Camp” and “IOI”?
The top 16 students in the nation competing in Platinum division are invited to the training camp for the US national team. Each year, the US team competes in the International Olympiad in Informatics (IOI) against teams from other countries.
25. How hard is it to make the national team?
We applaud any of our students aiming for this goal, but competing at this level requires an incredible amount of dedication and skill. One recent account by high-level competitor Andrei Margeloiu compared preparing for this kind of competition to Olympic athlete training. “Every single day in these 8 months I was practicing 5 hours.”
For most students, reaching Gold or Platinum division is an incredible achievement. For example, in the entire 2017-2018 contest season, only 94 students nationwide qualified for promotion from Gold to Platinum.
26. Does KTBYTE offer a class for Platinum training?
No. The level of work is so advanced, and the number of students able to reach this division and then dedicate an appropriate amount of time to it is so small, that it’s not possible for us to create a class for it at our current size. We encourage you to self-study and seek out other high-achieving students to work with if you get to this level!
27. What resources are there for training?
Aside from our classes, we recommend starting with reviewing past contests at http://usaco.org/index.php?page=contests, many of which we use for examples in KTBYTE classes. USACO provides a sequence of training materials at http://train.usaco.org/usacogate, although some of the material there is outdated and is aimed more at older C++ programming, without using many of the standard libraries available in modern language updates.
This style of contest is often called an “online judge” system, and you may find many examples by searching online. USACO maintains a list of additional links and resources at http://usaco.org/index.php?page=resources.
28. Where are the official contest rules?
http://usaco.org/index.php?page=instructions is the official page with all contest rules and technical details.
29. How can I contact the USACO organizers?
http://usaco.org/index.php?page=instructions has a section at the bottom about contacting contest organizers, as of December 2018.
30. Who runs the competition?
A volunteer staff of computer science professors, teachers, and students from various institutions runs the US contest. KTBYTE does not run the contest. We cannot change anything about the way it’s run, although we’re happy to give advice and help you prepare for it!
31. What happens after the competition begins?
After you start your timer, you’ll be given access to 3-4 questions (usually 3) you must solve in your personal time window. Each will present a scenario that you must write a program to analyze. At any time during your time window, you may submit your program for testing through the website. You can freely switch between or come back to any of the problems during your time window, and continue submitting your solutions until your time is up or you get them all perfect.
See http://usaco.org/index.php?page=contests to see past problems organized as they were during contests!
32. Video guides:
Java & Eclipse Setup (If you’ve already installed Eclipse at home you probably don’t need this)
USACO Basic Guide (The basics of understanding and writing a solution to a USACO problem. Should be review for everyone in CS90 and up.)
USACO Submission Guide (How to use the website to submit contest answers)
KTBYTE offers Bronze, Silver, and Gold level online training classes, with live instruction, for the USA Computing Olympiad (USACO).