System: Reach Pupil (1200+) on Codeforces

Goal: Go from a beginner (or Newbie) to Pupil (rating 1200+) on Codeforces.
Timeline: 8–12 weeks of consistent effort.
Daily commitment: 1.5–2.5 hours.


What is Pupil?

On Codeforces, ratings map to titles:

Rating Title Color
0 – 1199 Newbie Grey
1200 – 1399 Pupil Green
1400 – 1599 Specialist Cyan
1600 – 1899 Expert Blue

Reaching Pupil means you can consistently solve A and B problems in Codeforces rounds (Div. 2/3/4), and occasionally crack C. It proves solid fundamentals.


Prerequisites

Before starting this system, make sure you have:

Language recommendation: C++ is the de facto standard for competitive programming due to speed and STL. If you're starting fresh, learn basic C++ I/O, vectors, sorting, and maps first (1–2 weeks).

The 4-Phase System

Overview

Phase Focus Duration Target
1. Foundation Language basics, brute-force thinking Weeks 1–2 Solve A-level problems comfortably
2. Core Topics Learn the Big 5 patterns Weeks 3–6 Solve B-level problems in 15–20 min
3. Contest Mode Real contests + upsolving Weeks 7–10 Consistent positive delta in Div 3/4
4. Push to Pupil Targeted weakness fixing Weeks 11–12 Cross 1200 and stabilize

Phase 1 — Foundation (Weeks 1–2)

Goal: Get comfortable solving simple problems quickly and correctly.

What to do daily (1.5 hrs):

Topics to cover:

Problem sources:

Milestone: Solve 40+ problems rated 800


Phase 2 — Core Topics: The Big 5 (Weeks 3–6)

Goal: Learn the 5 fundamental patterns that cover 90% of A–B problems.

Spend ~1 week on each topic. For each topic: learn the concept (30 min), then solve 8–10 problems.

Topic 1: Sorting + Greedy (Week 3)

The most common pattern in competitive programming. Many problems reduce to: “sort the array, then greedily pick.”

Key ideas:

Practice problems (800–1100):

Problem Rating Key idea
A – Watermelon 800 Simple check
A – Divisible Sum Pairs 800 Iteration
B – Sort the Array 900 Sorting logic
B – Increase and Decrease 900 Greedy sum
B – Hungry Sequence 900 Greedy construction

Topic 2: Frequency Counting / Hashing (Week 3–4)

Many problems ask “how many of X?” or “does Y exist?” — solved with hashmaps/arrays.

Key ideas:

Practice problems (800–1100):

Problem Rating Key idea
A – Word 800 Count upper vs lower
A – Helpful Maths 800 Frequency / sorting
B – Unique Bid Auction 800 Frequency map
B – Balanced Array 800 Even/odd counting
B – Drinks 800 Averaging

Topic 3: Two Pointers / Sliding Window (Week 4–5)

For problems involving subarrays, subsequences, or ranges.

Key ideas:

Practice problems (800–1200):

Problem Rating Key idea
A – Nearly Lucky Number 800 Simple counting
B – Books 1000 Sliding window
C – Number of Pairs 1100 Two pointers + sorting
B – Longest Subsequence 1100 LCM-based window

Topic 4: Basic Math & Number Theory (Week 5)

Many Codeforces problems have a math trick at their core.

Key ideas:

Practice problems (800–1100):

Problem Rating Key idea
A – Even Odds 900 Math formula
B – Sum of Digits 900 Digit sum
B – GCD Length 900 GCD construction
B – Almost GCD 1000 Brute-force GCD
A – Parity 900 Even/odd pattern

Topic 5: Simple Binary Search (Week 6)

Binary search isn’t just for sorted arrays — it’s a powerful technique for any monotonic condition.

Key ideas:

Practice problems (900–1200):

Problem Rating Key idea
B – Worms 900 Binary search / prefix sum
C – Binary Search 1200 Binary search on answer
B – Aggressive Cows Classic BS on answer
C – Maximum Median 1200 Greedy + BS

Milestone: 100+ total problems solved, comfortable with A+B in virtual contests


Phase 3 — Contest Mode (Weeks 7–10)

Goal: Build contest skills — speed, accuracy, and the ability to perform under pressure.

Weekly schedule:

DayActivityTime
MonSolve 3–4 problems from weak topic (900–1100)1.5 hrs
TueVirtual contest — recent Div 3 or Div 4 round2 hrs
WedUpsolve the problems you couldn't solve in yesterday's virtual1.5 hrs
ThuSolve 3–4 problems from weak topic (900–1100)1.5 hrs
FriVirtual contest — recent Div 3 or Div 4 round2 hrs
SatRated contest (if available) or virtual contest + upsolve2–2.5 hrs
SunReview the week: what went wrong? What topics need more work?1 hr

The Upsolving Protocol (CRITICAL):

Upsolving is the #1 skill that separates improvers from stagnaters. After every contest:
  1. Attempt unsolved problems for 30 more minutes without the editorial
  2. Read the editorial. Understand the approach — don't just read the code
  3. Code it yourself from scratch (don't copy-paste)
  4. Add the problem and technique to your notes

Contest strategy for Div 3/4:

Rating tip: At this level, not getting WA on A and B matters more than solving C. A failed submission costs time (penalty) and confidence. Read problems twice before coding.

Milestone: Consistently solving A+B in Div 3/4 within 30 minutes, attempting C


Phase 4 — Push to Pupil (Weeks 11–12)

Goal: Fix weaknesses, polish speed, and cross 1200.

By now you should have identified your weaknesses. Common ones:

Weakness Fix
Slow on A problems Practice 50 more 800-rated problems for speed (timer: 5 min each)
WA on B problems Spend 5 extra minutes checking edge cases: n=1, all same, all different, max values
Can’t solve C Learn 2-3 more intermediate topics: prefix sums, basic DP, constructive algorithms
Rating anxiety Participate in MORE rated contests, not fewer. Rating variance decreases with participation.
Time management Do virtual contests with a physical timer. Practice the 10-40-90 split above.

Targeted practice:

Milestone: Rating 1200+ — you’re Pupil! 🎉


Topic Checklist — Complete Reference

Everything you need to know at the Pupil level:


Common Mistakes That Keep You Below 1200

  1. Not reading the problem fully. 50% of WAs come from misunderstanding the problem. Read it TWICE.
  2. Integer overflow. If numbers can be up to 10⁹ and you multiply two of them, use long long (C++) or handle large numbers.
  3. Off-by-one errors. Array indices, loop bounds, "strictly less than" vs "less than or equal to".
  4. Not handling edge cases. n=1, n=0, all elements equal, negative numbers, empty strings.
  5. Submitting without testing. Always test with the sample inputs. Then test with at least one custom edge case.
  6. Giving up after 1 contest. Rating is volatile when you have few contests. After 15+ contests, it stabilizes. Keep going.
  7. Only solving easy problems. If you only do 800-rated problems, you'll plateau. Push into 1000–1200.
  8. Not upsolving. Solving problems you CAN solve doesn't teach you. Upsolving problems you COULDN'T is where growth happens.

Essential Tools & Resources

Resource What it’s for
Codeforces Problemset Filter by rating, tag, and status
Codeforces Contests Virtual and rated contests
CLIST.by Upcoming contests across all platforms
CP-Algorithms Algorithm explanations with code
USACO Guide Structured curriculum (Bronze → Silver ≈ Pupil level)
A2OJ Ladders Curated problem lists by rating
CF Stress Testing How to stress test your solutions

C++ Template for Contests

If you’re using C++, start every contest with a clean template:

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int,int>
#define all(v) v.begin(), v.end()
#define fast ios::sync_with_stdio(0); cin.tie(0);

void solve() {
    // Your solution here
}

int main() {
    fast
    int t;
    cin >> t;
    while (t--) solve();
    return 0;
}
Why this template?

Rating Progression — What to Expect

Don’t expect a linear climb. Here’s a realistic trajectory:

Week 1-2:  -------- (unrated, solving easy problems)
Week 3-4:  First rated contests → rating ~700-900
Week 5-6:  Some ups, some downs → rating ~900-1050
Week 7-8:  Getting consistent → rating ~1000-1100
Week 9-10: Breaking through → rating ~1100-1200
Week 11-12: Stabilizing at 1200+ → PUPIL ✅
Reality check: You WILL lose rating in some contests. Everyone does. A bad contest doesn't erase your learning. The system works because of consistent volume — if you do 15+ rated contests and solve 200+ problems, reaching 1200 is almost guaranteed.

The Golden Rules

  1. Consistency > Intensity. 1.5 hours daily beats 10 hours once a week.
  2. Upsolve every contest. This is non-negotiable.
  3. Read problems twice before writing a single line of code.
  4. Test before submitting. Run sample tests + one custom edge case.
  5. Track your progress. Keep a log of problems solved, contests done, and topics learned.
  6. Don’t compare with others. Compare with your past self. Everyone has a different pace.

← Back to Systems  |  Back to Learning