Why this sheet exists
Codeforces has tens of thousands of problems. For someone starting out, the rating system is a rough guide — but raw rating alone doesn't tell you whether a problem is beginner-friendly or just technically easy for a different reason. This sheet is a hand-curated subset where every problem has been chosen because it teaches something concrete and isn't just a gimmick.
The honest problem with CF ratings
CF problem ratings are crowdsourced from contest performance — they reflect how hard a problem was in contest conditions, not how hard it is to learn from. A problem solved in 3 minutes by 80% of div 4 participants gets rated 800 even if it involves a subtle insight. Conversely, some 900s are genuinely tricky for beginners because the expected approach uses a pattern they haven't seen.
A problem rated 900 is not necessarily harder than one rated 800. It just had a lower solve rate during that specific contest, on that specific day, by those specific participants.
This is why you'll see some 900 and 1000 problems on this sheet that many people find easier than certain 800s. The sheet rating is CF's official rating — but the order within each tier reflects actual learning difficulty.
Selection rules
Every problem on this sheet satisfies all of the following:
- R1 No library required. The problem should be solvable with loops, conditionals, basic math, and sorting. No segment trees, no heavy data structures, no graph algorithms at the 800–1000 level.
- R2 The key insight is learnable. There's a clean "aha" moment — parity, ceiling division, greedy swap, counting argument — that a beginner can internalize and reuse.
- R3 Not a gotcha. Problems that rely on an obscure edge case, a misleading statement, or unusual I/O format are excluded. You should be able to read, think, and code — not debug for 40 minutes because of a quirk.
- R4 Appears in a legitimate Div 3 or Div 4 round, or is a well-known classic. Problems from unofficial rounds or educational rounds with contested difficulty ratings are avoided unless they've aged well.
- R5 High solve count. Problems with very low solve counts at their rating level are skipped — they're likely rated incorrectly or were too contest-specific to be educational.
The division labels (D3 / D4)
Each problem is tagged with the division it most naturally belongs to — not necessarily the division it appeared in. The heuristic is:
- D4 Can be solved with a single observation and basic code. Typical Div 4 A or B slot. If you're new, start here.
- D3 Requires a cleaner argument or slightly more careful implementation. Typical Div 3 A or B slot. Tackle these after you can consistently solve Div 4 A–C.
Problems rated 1000 are mostly tagged D3 on this sheet because at that level, even "easy" problems expect you to compose two observations instead of one.
How to use the sheet
- Work through 800s first, in order. The order within each section is intentional — simpler patterns come first.
- Don't skip. A lot of 900s build on patterns introduced in 800s. The sheet is designed to be done in sequence.
- If you're stuck for more than 30 minutes, look at the hint or editorial. At this level, struggling past an hour rarely teaches you more — it just builds bad habits.
- After finishing all 800s, try a live Div 4 round. The sheet is training, not a substitute for timed competition.
- The CF Tracker will automatically detect which problems you've already solved on your CF account so you can skip them.
What this sheet is not
- It's not comprehensive. There are thousands of good 800–1000 problems on CF. This is a curated starting point, not an exhaustive list.
- It's not authoritative. If a problem feels too hard for its rating, that's a known CF issue — not you failing. Use the criteria above to judge for yourself.
- It's not permanent. The sheet gets updated when better problems are found, or when community feedback identifies something that shouldn't be here.
Suggesting changes
If you think a problem on the sheet violates the rules above — too obscure, wrong rating group, or just a bad fit — the best way to suggest a change is to reference the rule number it violates (R1–R5) and propose a replacement problem that satisfies all five. Vague complaints without alternatives won't be acted on.
A note on "easy" problems at 900/1000
Some problems here rated 900 or 1000 are genuinely simpler than certain 800s on the sheet. This is not a curation error. The CF rating reflects contest-day performance. A problem can be rated 1000 because it appeared late in a Div 3 round where most participants ran out of time — not because the underlying idea is hard. The sheet is ordered to reflect actual difficulty, not raw rating. Trust the order more than the number.