About the USA Computing Olympiad

USACO is a season-long algorithmic programming contest open to anyone in the world (despite the name). Four contest rounds, four difficulty divisions, three problems per round, and a clean promotion path from Bronze through Platinum. The top US high schoolers from the Platinum round are invited to a summer training camp and selected for the four-person USA team at the International Olympiad in Informatics (IOI).

The season at a glance

USACO seasons run roughly December through March. Each round opens worldwide for ~4 days; you choose any contiguous window inside that time to compete.

RoundWindowNotes
December~1st full weekend of DecemberSeason opener. Lighter, more accessible problem set; lots of new competitors.
January~late JanuaryStandard mid-season difficulty.
February~late FebruaryStandard difficulty. Last regular round before US Open.
US Open~mid MarchFinals. 5-hour contests in Gold/Platinum; results determine US team selection invitations.

Exact dates each year are posted at usaco.org. Plan around the December round — it's the easiest to score well in and the cheapest path out of Bronze.

The four divisions

Entry

Bronze

Ad-hoc, complete search, simulation, brute force. The challenge is correctly translating a wordy problem statement into clean code, not the algorithm itself.

Time: 4 hours · Promote: typically ~750 / 1000 on at least one problem.

Foundations

Silver

BFS, DFS, flood fill, binary search on the answer, prefix sums, two pointers, sorting, sliding window, basic greedy. Constraints rise to ~10⁵–10⁶.

Time: 4 hours · Promote: typically high score on at least one problem + decent on a second.

Real CP

Gold

DP (1-D, 2-D, on trees, bitmask), Dijkstra, MST, topological sort, Union-Find, segment / Fenwick trees, math (modular, combinatorics), strings (KMP, hashing).

Time: 4 hours · Promote: typically near-full or full score required.

Elite

Platinum

Heavy data structures (lazy segtree, merge-sort tree, persistent, segtree beats, link-cut, suffix), heavy graph (centroid decomposition, HLD, max-flow, min-cost), DP optimizations (Knuth, Divide & Conquer, Convex Hull Trick), advanced math.

Time: 5 hours · Promote: not applicable — this is the top division. Top US scorers are invited to camp.

Scoring & submission

The clock. Once you click the "start contest" button, your personal timer begins (4 hours for Bronze/Silver/Gold; 5 hours for Platinum). You must submit before that timer ends, even if there's still time left in the public window.

Allowed languages

LanguageNotesRealistic ceiling
C++ (17)The default. Fast, full STL, biggest community.Platinum and beyond
JavaViable through Gold. Constant-factor slow vs. C++; need to pay attention to I/O.Comfortable through Gold; tight for Platinum
Python 3 (PyPy)USACO grader runs PyPy. Still ~5–10× slower than C++ in practice.Bronze and Silver are realistic; Gold is painful; Platinum effectively requires C++
C, Pascal, KotlinAccepted but rarely used.
Switch to C++ early. Even if you started in Python, the move to C++ becomes mandatory at Gold/Platinum because of time limits. Easier to switch at Bronze/Silver than to fight the grader at Gold.

How promotion works

If your score on a round clears that round's promotion threshold, you're moved up to the next division starting with the next round. You compete in the new division for the rest of the season; you cannot drop back. At the start of each new season, divisions are reset based on the prior year's standings.

Thresholds are set per-round by the contest directors, not pre-announced. USACO publishes them after each round.

Beyond the season

Why USACO is great training even if you never win