So you want to do USACO? Make sure you actually like it and aren’t doing it because you want it on your college resume! (See previous article)
I’m going to assume that you understand USACO well enough and competed in some competitions/looked at some problems already.
But here are my suggestions after my years on attempting USACO.
- Always do Big-O analysis before you begin writing your code
- Usually the first method I come up with is very CPU intensive, and USACO makes sure that these methods will timeout (which is bad of course). The last thing you want to do is write code that times out, because that means you have to rewrite it all over again.
- Anything that has a run time bigger than N^2 is dangerous.
- Essentially, NEVER BRUTE FORCE A PROBLEM.
- Look at old contest problems / do the USACO training
- Spend time thinking about each problem before actually coding them, and if you can’t solve one, take a break from coding. Don’t go on a 8 hr training spree because it isn’t going to be productive.
- Problems will take a lot of time. Don’t be worried if it takes more than 3 hrs on a single problem. Everyone faces the same problem and probably takes just as long as you do to solve them.
- Fact> Most problems have solutions that are easily accessible on Google. So after you write your version, go search for others and see how they approached the problem.
- I don’t suggest googling before you’ve done the problem. It really ruins the challenge of the problem.
- Don’t just read. Do.
- The best way to understand a concept is to be able to visualize it.
- And the best way to remember a concept is to work through it. Although you can mentally work through the process, actually typing the code (without looking at the solution) helps you go through the hoops and help you find flaws in your thinking/learning.
- Doing things will help you visualize everything.
I think the biggest thing I’ve learned over the years is that (A) You need to know the problem inside out and what the output is and (B) write pseudo-code before actually writing the code on your computer.
Finally, don’t stress yourself out that you aren’t getting perfect scores and such. Those problems are HARD. Some people spend their entire middle and high school free time working on these problems and learning. Maybe that’s what you want to do, but if you have other important activities in your life, be realistic with goal setting. :P