Home
These are my USACO notes from 3/10/2024 onwards.
To speed up my acquisition of competitive programming skills, I want to start documenting my notes for each problem I come across and build intuition for problem-solving techniques. I also want to do my best to take away an improvement from each problem I do.
These are completely inward-facing, and serves as an accountability measure to keep good documentation of the problems I do. A lot of the code implementations might not even work, because they will be me playing around with the official solution to understand why it works/re-implementing parts of the official solution after reading it. A lot of the times, I'll revisit problems weeks or months later, which is why some problems are mentioned twice, or don't have corresponding pseudocodes and implementations. In general, I'll also wait ~a week before re-implementing a problem after I've read the official solution, so that's why the latest problems probably don't have solutions yet.
Practice Approach (Inspired by https://www.reddit.com/r/usaco/comments/pk3tjp/the_ultimate_usaco_practice_method/):
Learn a little bit about and practice a few questions from each of the major topics on the USACO Guide
Stop once you can solve the easy questions from each topic
Go through questions from previous USACO contexts
Use the problem-solving approach below up to step 7
Check the official solution
Change your solution if necessary
Implement your solution
General Problem-Solving Approach:
Read through the problem
Try to observe some patterns while solving the sample test cases
If you can think of a great solution right off the bat, skip to step 5
Ignoring the time complexity, think of the most simple solution possible and plan it out completely
If that solution isn't optimal, bookmark it and then try to see if you can optimize it in any way AND/OR look at the subtasks and see what they might provide insight into more optimized solutions
Once you have a solution, test it yourself with a few hand-generated test cases. Try to break your solution.
Write a description of the solution down
Write out detailed pseudo-code that is just advanced enough that you could implement it even without knowing what the problem is
Flesh that out into code
Last updated