Paper Feed

Issue 36 · Pick 01 AI / ML ✓ read

Post-Training Language Models for Gold-Medal Performance in Coding Competitions

Aleksander Ficek, Sean Narenthiran, Mehrzad Samadi, Somshubra Majumdar, Boris Ginsburg

TL;DR: NVIDIA post-trained two mixture-of-experts models (a 30B and a 550B) into competitive-programming specialists, wrapped them in a feedback-driven test-time loop called GenCorrect, and then ran the big one live during IOI 2026 — same two five-hour sessions, same 50-submissions-per-problem limit, no internet. It scored 535.4/600, beating not just the gold threshold (361.12) but the top human contestant (498.27). That's a first. Just as interesting as the headline: the paper's ablations show SFT on synthetic reasoning traces does almost all the work, RL adds a couple of points at best, and the test-time refinement loop — which turns IOI's subtask feedback into a search signal — adds well over 100 points. The capability lives as much in the system as in the model.

Why IOI is the hard mode of code evaluation

Most coding benchmarks reward retrieving and adapting known patterns. IOI problems are designed by people whose explicit job is to defeat that: novel algorithmic constructions, tight time and memory limits, and hidden test cases. Crucially, IOI has a partial credit structure that most benchmarks lack. Each problem is worth 100 points split across subtasks with progressively harder input constraints — a brute-force solution might pass the small-N subtask for 15 points while the full problem needs a clever data structure. Contestants get up to 50 submissions per problem and see their subtask scores after each one.

That last detail matters more than it looks. It means IOI is not a one-shot generation task; it's an interactive optimization problem with a coarse but informative reward signal. Humans exploit this constantly: submit the brute force, lock in the easy subtasks, then iterate on the hard ones. The central design insight of this paper is to build a machine that plays the same game — and, given enough parallel compute, plays it better.

Gold medals at IOI have already been claimed by o3, DeepSeek, and open-weight systems like GenCluster and Nemotron-Cascade 2. What hasn't happened before is an AI outscoring the single best human on an IOI problem set, and doing it prospectively — during the live competition, before problems or solutions existed anywhere on the internet — which removes the contamination question entirely.

The pipeline: mostly SFT, a little RL

The training recipe is deliberately conventional, which is what makes the ablations valuable. They curate 22,000 problems from 16 competition families spanning two decades, package each into an executable evaluation environment (statement, test cases, reference solutions), and validate that environments give consistent verdicts. Evaluation sets (IOI 2025, ICPC 2025, LiveCodeBench Pro) are excluded and deduplicated.

Then a teacher model (DeepSeek-V4-Flash) generates synthetic reasoning traces: 1.2M for the small model, ~478K for the big one, with more samples allocated to harder problems. One clever inclusion: self-improvement traces, where the teacher is shown a previous solution and asked to refine it. This pre-trains the exact behavior the inference loop will demand later — reading a flawed solution plus feedback and producing a better one.

  • Nemotron-3-Nano-CC (30B total, 3B active): 3 epochs of SFT, then GRPO-based RL on 2,847 problems with a binary executable reward (1 for full credit, 0 otherwise), 262K-token contexts, no KL penalty.
  • Nemotron-3-Ultra-CC (550B total, 55B active): one epoch of SFT. No RL — too expensive at that scale.

The Nano numbers tell a clean story about where the gains come from:

Nano-CC (3B active params) on IOI 2025, by pipeline stageIOI 2025 score (out of 600)0100200300400500130438Base model280438+ SFT (3 epochs)291438+ RL (GRPO)468438+ GenCorrect (5 rounds)ScoreGold threshold (438.3)Figure 1(a) and Sections 4.3–4.5. GenCorrect uses the official 50-submission limit.

SFT: +150 points. RL: +11. Test-time refinement: +177. The authors probe the RL question further by initializing RL from the base model versus each SFT epoch. RL from scratch does move the needle (21.7% → 24.9% Score@1 after 30 steps), so executable rewards work — but it never approaches what SFT delivers, and the best final result comes from RL on top of the third SFT epoch. Their diagnosis is plausible: with binary-reward GRPO, a rollout group only produces a learning signal when it contains both successes and failures, so RL only sharpens the frontier the model already has. Combine that with 255K-token rollouts receiving a single terminal reward — a brutal credit-assignment problem — and modest gains are what you'd expect.

The scale comparison is also worth noting: Ultra-CC with one SFT epoch on ~478K samples and no RL beats Nano-CC's full three-epochs-plus-RL treatment on all three benchmarks (IOI 50.7% vs 48.5%, ICPC 57.4% vs 51.0%, LCB Pro 74.5% vs 71.6% Score@1/Pass@1). If you can afford the inference bill, lightly adapting a stronger base beats heavily post-training a smaller one.

GenCorrect: turning subtask scores into a search gradient

Here's the part of the system worth internalizing. Single-sample, even the finished Ultra-CC scores ~304/600 on IOI 2025 — a middling result. GenCorrect converts that into 502. The mechanism is a closed loop that treats IOI's evaluator like an oracle you can query 50 times per problem, 10 queries at a time:

Generate 200 candidates Diversity cluster score-blind, K=10 farthest-point picks Submit 10 official grader Accumulate subtask scores best score per subtask so far + 3 reference solutions Next-round prompt "pick ONE unsolved subtask, target the largest gap" ×5 rounds = 50 submissions
One GenCorrect round. The 200→10 compression happens with zero knowledge of true scores (a score-blind local heuristic plus farthest-point clustering on code similarity), so the 10 submissions maximize coverage of distinct algorithmic approaches. Only after submission do real subtask scores enter the loop.

Two design choices stand out. First, diversity selection is score-blind. From 200 candidates, they greedily pick 10 cluster centers that maximize pairwise dissimilarity of the normalized code (c_{\text{next}} = \arg\max_c \min_{z \in C}[1 - \text{sim}(c,z)], where \text{sim} compares token shingles), then pick each cluster's representative using a heuristic Q(c) built only from local signals — compiles, looks like a complete program, code length, exact-duplicate frequency. This is the AlphaCode behavioral-clustering idea, but done without executing on generated tests in the inner loop. You're spending your 10 precious oracle queries on 10 genuinely different hypotheses, not 10 rephrasings of the modal solution.

Second, the feedback state is an accumulated best-per-subtask vector: A_r(t) = \max(A_{r-1}(t), \max_{c \in S_r} s_t(c)), where s_t(c) is candidate c's score on subtask t and S_r is round r's submissions. The next round's prompt shows the model this vector, the max possible per subtask, and three reference solutions chosen to (a) preserve what's solved, (b) attack the largest gap, (c) maintain diversity — and explicitly instructs it to pick exactly one eligible unsolved subtask to target. That instruction (visible in the Appendix C prompts) converts a 600-point global optimization into a sequence of focused local ones. Prior systems (o1-ioi, GenCluster) split problems into subtasks externally; here the model does its own triage, which the authors credit for needing far fewer generations.

The effect scales with model quality in a telling way. At Score@1, Ultra-CC leads Nano-CC by only ~13 raw IOI points. At Score@200 (pure parallel sampling) the gap widens to 44 points (505 vs 461), and across five GenCorrect rounds Ultra gains 158.1 points to Nano's 107.6. Better base models don't just produce better single samples — they produce richer candidate pools and use feedback more effectively. Test-time compute amplifies model-quality differences rather than washing them out.

The live IOI 2026 run

With IOI 2025 as a dev set, they built a competition-specific variant with three adaptations, each a nice engineering lesson:

Teacher swap for token efficiency. GLM-5.2 beats DeepSeek-V4-Flash on IOI 2025 (66.0% vs 55.3% Score@1) and uses ~30% fewer tokens per solution (85.9K vs 120.5K). Both properties transfer through distillation: the GLM-trained Ultra-CC hits 59.4% with 84K-token outputs vs 50.7% with 90K for the Flash-trained one. In a wall-clock-limited contest, shorter reasoning traces mean more candidates per round — output length is a first-class training-data selection criterion.

A 1,000-candidate final round with self-generated graders. Since Ultra's rounds saturate by round five, they blow the last round's generation budget out to 1,000 candidates — but still only 10 submissions. To rank 1,000 candidates without the real grader, the model writes its own evaluation infrastructure: 50 test-input generators plus validators (filtered until 100 valid inputs exist), every candidate is executed on them, and a model-written scoring script mimicking the subtask criteria ranks the pool. The system bootstraps a synthetic grader to pre-screen for the real one.

NVFP4 quantization as an explicit accuracy–throughput trade. The chosen config (FP8 KV cache, multi-token prediction 5) gives up 6.6 points of Score@1 (59.4% → 52.8%) for 3.7× throughput (199 → 737 tokens/s/GPU). They're betting that GenCorrect's search converts raw sample throughput into score more efficiently than single-sample quality does — Table 3 says the bet paid off.

The result, from a single prospective run on up to 760 GB300 GPUs:

IOI 2026 (live, prospective evaluation)score (out of 600)0100200300400500361Gold threshold498Top human contestant522General pipeline (mean of 5)535Live competition runTable 4. General-pipeline runs were post-competition, range 495.0–545.8. The live run was during the contest window, before problems were public.

The honest caveat the authors include: the post-hoc general-pipeline runs average 521.72 with a range of 495.0–545.8. The live score of 535.4 sits inside that range, so you can't cleanly attribute the last ~14 points to the competition-specific adaptations — it could be run-to-run variance. But even the vanilla pipeline's mean beats the top human, and the worst observed run (495.0) essentially ties them.

What to make of it

The prospective evaluation is the strongest part of the evidentiary case. Retrospective competition evals always carry a contamination asterisk; running during the live contest before problems were publicly released eliminates it. The comparison to humans is matched on time, submission count, submission cadence, and internet access — and, importantly, IOI's subtask feedback is exactly what human contestants also receive, so GenCorrect isn't exploiting privileged information. What is wildly unmatched is compute: 760 top-end GPUs generating hundreds of parallel candidates versus one person with one machine. The authors say this plainly in the limitations — it's a system-level result, not an equal-resource one. Also note the run was unofficial and unsupervised by IOI, so "beat the top human" rests on the authors' own harness faithfully replicating the grading; the promised checkpoint and NeMo-Skills recipe release is what would make this verifiable.

There's a subtler point lurking in Table 1: the specialized model itself is not the best model per-sample. GLM-5.2 scores 66.0% Score@1 on IOI 2025 versus Ultra-CC's 50.7%. The record was set by a weaker-per-sample model wrapped in a better search-and-refinement harness, quantized specifically to feed that harness more samples. That reframes what "capability" means at the frontier of these contests: the scaffold — diversity-aware submission allocation, feedback accumulation, self-generated graders — is a large fraction of the score, and one presumes GLM-5.2 inside this scaffold would score higher still.

For the field's assumptions, the ablations are quietly the most useful contribution. The finding that RL with verifiable rewards adds only ~2 points on top of strong distillation SFT (and can't substitute for it) cuts against the "RL is where reasoning gains come from" narrative — at least in this regime, where a strong teacher exists and rewards are binary and terminal over 255K-token trajectories. And the demonstration that self-improvement traces in SFT data prime the refinement behavior needed at inference is a transferable recipe: train the model on the loop you'll run it in.

If you read two things, read Section 5 (the competition-specific adaptations — the teacher-token-efficiency and quantization trade-off tables are genuinely instructive systems engineering) and Appendix C (the full GenCorrect prompts and selection rules; the "choose exactly one eligible target subtask" prompt is the whole strategy in one paragraph).