Back to CP room

How to start competitive programming.

People keep asking me how to start competitive programming. This page is my answer.

In short: use the USACO Guide as your map, solve a hundred easy problems first, then learn algorithms slowly, and struggle with problems before you reach for the editorial.

5 min read

The path, in five phases

  1. Phase 0

    Pick one language and set up

    One language, one editor, one way to run code. Then stop configuring and start solving.
    Language
    C++ is what most competitive programmers use: it is fast, and its standard library covers most of what contests ask for. If you already know another language well, the USACO Guide explains the trade-offs.
    Setup
    Learn to read input and print output the way judges expect. That is the whole setup for now.
  2. Phase 1

    Your first 100 easy problems

    Before any algorithm, a hundred easy problems.
    Where
    The Codeforces problemset, sorted by difficulty, rated 800 to 1000. The CSES Introductory Problems. The USACO Guide Bronze problems.
    How
    Set a timebox. Struggle inside it. When it runs out, read the editorial. Then close the editorial and upsolve: write the solution yourself until it is accepted.
    Count
    Keep a tally. The tracker further down this page counts to a hundred for you.
  3. Phase 2

    Learn algorithms, slowly

    Now follow the USACO Guide, level by level: Bronze, Silver, Gold, Platinum. One module at a time, with its problems, before the next.
    The map
    The full topic map is below. Each module has its own problems; solve them before you move on.
  4. Phase 3

    Contests, and the upsolving habit

    Contests show you what you can do under a clock. The learning happens after, when you upsolve what you could not finish.
    Short contests
    Codeforces Div 3 and Div 2 rounds, CodeChef Starters, AtCoder Beginner Contests.
    Long challenges
    Long-format contests give you days with a problem.
    After every contest
    Upsolve the problems you did not solve.

    “Even if you miss the contest make sure you upsolve the discussed problems.”

    Winter Coding Camp, 2014

    “Long-form learning might not have the instant gratification of quick contests, but it’s where true mastery develops.”

    LinkedIn, March 2025

    “I could spend days wrestling with a difficult problem, researching algorithms, and implementing different approaches.”

    LinkedIn, March 2025, on the Long Challenges
  5. Phase 4

    Find your people

    Look for a community and, when you are ready, a camp.
    Camps
    The ICPC and IOI camps I have mentored at, who runs them, and their public announcements are in the CP room.
    Where to find me
    My Codeforces profile is public. Contests I set or judge are listed in the CP room.

How to struggle well

How to struggle well

“It’s always easy once you know it, but getting there and proving it is the harder part.”

Winter Coding Camp, 2014

“Curiosity is the first step to learning. Even if it means getting struck by lightning, going wrong multiple times, falling. But getting up and trying what you tried again.”

LinkedIn, October 2024

A plateau can end in a single round, but only if you keep entering them. The 1200 wall

The one piece of advice

The one piece of advice

“Only Advice: Solve Problems”

My own practice series, CampGrind, had a one-line brief: CampGrind

The loop

  1. 1

    Read

    Read the statement twice. Work the sample by hand.

  2. 2

    Think

    Think for the timebox. Write down what you tried, even the ideas that failed.

  3. 3

    Hint

    Still stuck? Take one hint: a tag, the first line of the editorial, a friend’s nudge.

  4. 4

    Editorial

    Still stuck? Read the editorial until you understand the idea.

  5. 5

    Upsolve

    Close the editorial. Write the solution yourself until it is accepted.

  6. 6

    Write it down

    One line on the idea you missed, in your own words. Keep those notes; they’re the part you’ll reread.

The map

The map

The USACO Guide is the topic map for Phase 2. Its modules, level by level, in its own order (a few optional ones left out).

Bronze
Silver
Gold
Platinum

Questions

Questions
How long until I’m good?

“most of you starting out get into analysis paralysis, and are looking for immediate gains or results in ratings. the answer for growth is to just keep solving problems and keep practicing.”

LinkedIn, 2024

“Don’t chase the ratings. Chase learning topics and keep challenging yourself with problems that keep bringing out the best in you.”

LinkedIn, 2024

Count your first hundred

Every accepted easy problem gets a square. Paste the link if you like, or just count. It saves in this browser only.

0 of 100 solved. Nothing counted yet.

  1. Problem 1: not yet
  2. Problem 2: not yet
  3. Problem 3: not yet
  4. Problem 4: not yet
  5. Problem 5: not yet
  6. Problem 6: not yet
  7. Problem 7: not yet
  8. Problem 8: not yet
  9. Problem 9: not yet
  10. Problem 10: not yet
  11. Problem 11: not yet
  12. Problem 12: not yet
  13. Problem 13: not yet
  14. Problem 14: not yet
  15. Problem 15: not yet
  16. Problem 16: not yet
  17. Problem 17: not yet
  18. Problem 18: not yet
  19. Problem 19: not yet
  20. Problem 20: not yet
  21. Problem 21: not yet
  22. Problem 22: not yet
  23. Problem 23: not yet
  24. Problem 24: not yet
  25. Problem 25: not yet
  26. Problem 26: not yet
  27. Problem 27: not yet
  28. Problem 28: not yet
  29. Problem 29: not yet
  30. Problem 30: not yet
  31. Problem 31: not yet
  32. Problem 32: not yet
  33. Problem 33: not yet
  34. Problem 34: not yet
  35. Problem 35: not yet
  36. Problem 36: not yet
  37. Problem 37: not yet
  38. Problem 38: not yet
  39. Problem 39: not yet
  40. Problem 40: not yet
  41. Problem 41: not yet
  42. Problem 42: not yet
  43. Problem 43: not yet
  44. Problem 44: not yet
  45. Problem 45: not yet
  46. Problem 46: not yet
  47. Problem 47: not yet
  48. Problem 48: not yet
  49. Problem 49: not yet
  50. Problem 50: not yet
  51. Problem 51: not yet
  52. Problem 52: not yet
  53. Problem 53: not yet
  54. Problem 54: not yet
  55. Problem 55: not yet
  56. Problem 56: not yet
  57. Problem 57: not yet
  58. Problem 58: not yet
  59. Problem 59: not yet
  60. Problem 60: not yet
  61. Problem 61: not yet
  62. Problem 62: not yet
  63. Problem 63: not yet
  64. Problem 64: not yet
  65. Problem 65: not yet
  66. Problem 66: not yet
  67. Problem 67: not yet
  68. Problem 68: not yet
  69. Problem 69: not yet
  70. Problem 70: not yet
  71. Problem 71: not yet
  72. Problem 72: not yet
  73. Problem 73: not yet
  74. Problem 74: not yet
  75. Problem 75: not yet
  76. Problem 76: not yet
  77. Problem 77: not yet
  78. Problem 78: not yet
  79. Problem 79: not yet
  80. Problem 80: not yet
  81. Problem 81: not yet
  82. Problem 82: not yet
  83. Problem 83: not yet
  84. Problem 84: not yet
  85. Problem 85: not yet
  86. Problem 86: not yet
  87. Problem 87: not yet
  88. Problem 88: not yet
  89. Problem 89: not yet
  90. Problem 90: not yet
  91. Problem 91: not yet
  92. Problem 92: not yet
  93. Problem 93: not yet
  94. Problem 94: not yet
  95. Problem 95: not yet
  96. Problem 96: not yet
  97. Problem 97: not yet
  98. Problem 98: not yet
  99. Problem 99: not yet
  100. Problem 100: not yet

Need problems? The CSES Problem Set or the Codeforces problemset (sort by difficulty, 800 to 1000).