NEWS.DISPATCHUSACO GUIDE / FIELD NOTE

How to Practise With Past USACO Problems: The Upsolving Loop That Actually Builds Skill

FILECONTEST INTEL
STATUSPUBLISHED
FOCUSUSACO / PREPARATION
MODEEXPLAINER
READING.MODEFULL BRIEFINGScroll to explore

Solving a problem, reading the explanation, nodding, and moving to the next one is the most common practice routine in competitive programming — and the least effective. It trains you to recognise solutions, while contests test whether you can reconstruct them. The fix is a five-step loop with one non-negotiable step: after you read anything, you close it and re-code the problem from a blank file.

Why “just do more problems” stops working

Volume works beautifully at the start. When your toolkit is nearly empty, every new problem hands you a technique you did not have, and progress is fast enough to feel automatic. Then, usually somewhere in Silver, it stops. Students describe the plateau the same way every time: “I’ve done fifty problems this month and I’m not getting better.”

They usually are not lying about the fifty problems. What has happened is that the routine quietly changed. Early on, the loop was struggle → solve → learn. Later, as problems get harder, the struggle gets uncomfortable and the loop degrades into struggle briefly → read the answer → feel that you understood it → next. That second loop produces a very convincing sensation of learning. It produces almost no contest skill, because the thing it exercises — following a correct argument someone else has written — is not the thing a contest asks for.

The contest asks for something quite specific: alone, with a timer running, roughly three problems and 1000 points in front of you, no help of any kind, generate the idea yourself and turn it into a program that survives official test data. Nothing in the read-the-answer loop rehearses that. So the question is not how many problems you do. It is what happens in the forty minutes after you look something up.

Set a struggle budget, and hold it

Two failure modes bracket this. Look too early and you never build the reflex. Grind for four hours on a problem three divisions above you and you burn an evening learning nothing. The way out is a budget decided in advance: a fixed number of minutes of genuine effort, after which you are allowed to look — and not before.

“Genuine effort” needs defining, because staring at a statement is not it. Effort means: you have read the constraints and named the complexity class you need; you have written down at least two candidate approaches and the reason each fails; you have tried a small case by hand. If you have not done those three things, your timer has not really started.

Division Struggle before looking What to look at first Why this length
Bronze 30–45 minutes Just the constraints again, then the first idea only Bronze failures are usually careless reading, not missing knowledge
Silver 45–60 minutes The name of the technique, nothing else — then go back Often you have the tool and did not see the trigger; a one-word nudge is enough
Gold 60–90 minutes, split across two sittings The state or the graph model, not the full derivation Gold is a modelling problem; being handed the model still leaves plenty to learn
Platinum 90+ minutes, and sleep on it Read the full explanation, then treat it as a study text At this level the intended idea can be genuinely out of reach; reading is legitimate study
Our coaching guideline, not an official USACO rule. Adjust to your own level rather than the label on the problem.

Notice the middle column. There is a large difference between “tell me the technique” and “show me the code”, and most students jump straight to the code because it resolves the discomfort fastest. Ask for the smallest hint that will unstick you, then put it away and go back to your own attempt. A problem you finished after a one-word nudge is worth more than three you read.

The five-step loop

Here is the whole method. It is not complicated; it is just harder than what most people do, which is exactly why it works.

A five-step upsolving loop: read the constraints and pick a target complexity, struggle to your budget with a timer, take the smallest hint rather than the code, close everything and re-code from a blank file, then log it and re-solve cold two weeks later
The five steps. Step 4 is the one almost everyone skips, and the one that does the work.

Step 4 deserves its own paragraph, because it is where the method lives or dies. After you have read a hint or an explanation, close it — the tab, the notes, everything — and open an empty file. Then write the entire solution yourself, from scratch, until it is accepted. Not a copy. Not a “type along”. Reconstruction.

This is unpleasant the first several times, and that is diagnostic. If re-coding an explanation you just read and fully understood turns out to be genuinely hard, then you did not have the solution — you had the pleasant feeling of having followed one. Better to discover that on a Tuesday evening in August than at hour three of a contest in January.

Step 5’s second half is the multiplier. Put the problem back in the queue and re-solve it, cold, two weeks later. Most students find that a problem they “learned” a fortnight ago now takes half the original time but is still not instant — which is exactly the signal that the first pass had not finished the job. The second pass is what moves a technique from something you have seen into something you own.

A log that compounds, instead of a list that does not

“Problems solved: 47” is not data. It tells you nothing about what to do next week. A useful log records the failure mode, because failure modes repeat and each one has a different fix. A student who keeps writing “misread the constraint” needs a reading protocol; a student who keeps writing “had the right idea, could not implement it” needs typing reps, not new theory. Those two students should spend their next month doing completely different things, and only a log can tell them apart.

Six fields are enough. Keep it in a spreadsheet and fill it in the five minutes after each problem, while it is fresh.

Field Example entry What it is for
Problem & division Silver, past contest set, problem 2 Lets you see whether you are practising at the right level
What the constraint told me N up to 200,000 → needed N log N, ruled out all pair comparisons Trains the habit of budgeting complexity before choosing an approach
Where exactly I stalled Saw it was a graph, could not decide what a vertex should be The most valuable field. Be brutally specific
The idea I was missing Vertices = (cell, remaining fuel), not just cell One sentence, in your own words — never pasted
Re-coded from blank? (Y/N) Y — 35 min, two off-by-one bugs Makes step 4 auditable, so you cannot quietly skip it
Re-solve date 2 weeks out Schedules the second pass instead of hoping you remember
The log our coaches ask students to keep. Fill it in immediately after the session, not at the end of the week.

Review the log monthly and count the stall column. Whatever appears most often is your training plan for the next four weeks. This is also the fastest way to make a teacher useful: a coach handed six weeks of specific stall notes can diagnose in ten minutes what would otherwise take a term of guessing.

Turning it into a week you will actually keep

The online contests fall across the winter months, with a US Open in spring, and exact dates are published each season on usaco.org — plan backwards from what is posted there. From a late-summer start that is a long runway, and the mistake is to fill it with heroic weekends that collapse by October. Seven or eight focused hours a week, kept for four months, beats fifteen hours a week kept for three.

A weekly practice pattern showing two upsolving sessions midweek, a full four-hour timed contest simulation on Saturday, and a Sunday review and logging session, totalling roughly seven to eight focused hours
A sustainable weekly pattern. Adjust the day names to your own school timetable; keep the structure.

Two structural points about that week. First, the Saturday block is a set, not a problem: three problems in one continuous stretch, the way a contest is actually shaped, because budgeting attention across three problems is its own skill and cannot be trained one problem at a time. Second, Sunday is not optional padding — it is where the week’s value is realised. Every problem you missed on Saturday goes through the full five-step loop on Sunday, including the re-code. A timed set you never upsolve is a measurement, not training.

For material, work through the past-contest set we have gathered and organised on our past contests page, and pair it with the topic material on our resources page. A number of the years carry worked walkthroughs and the set keeps growing as our teachers add to it, so the exact papers and walkthroughs you receive follow what your teacher sends. Use a walkthrough only at step 3, and only after your budget has expired.

One last piece of calibration. Across the last three seasons our students recorded 100 promotions into Silver, 70 into Gold and 18 into Platinum (de-identified, per Hanlin; results vary, and these are our own teaching records rather than official statistics). The students behind those numbers differ enormously in age, school and starting point. Their practice logs do not. Almost all of them show the same unglamorous pattern: a modest number of problems, each one taken all the way through step 5.

Frequently asked questions

How long should I struggle before looking at a hint?
Roughly 30–45 minutes at Bronze, 45–60 at Silver, 60–90 at Gold. That is our coaching guideline, not a USACO rule.

Is it cheating to read solutions when practising?
No. Contest rules govern contest time — confirm them on usaco.org. In practice, reading is fine; the rule that matters is re-coding it yourself afterwards.

How many problems a week should I do?
Two full upsolving loops plus one timed three-problem set, about 7–8 focused hours. Depth beats volume once you reach Silver.

Should I re-solve problems I already solved?
Yes — cold, two weeks later, from a blank file. If it is still slow, the first pass taught you less than it felt like.

This is an independent guide operated by Hanlin Education for China-based international-school students. We are not affiliated with, endorsed by, or sponsored by USACO (the USA Computing Olympiad). Contest rules, dates, formats and registration are set by USACO alone, and registration stays on usaco.org — confirm current details there. Spotted an error? We correct confirmed factual errors within 7 working days.

END.OF.FILEKEEP SOLVING