I am currently in the 10th grade. I would like to get started in competitive programming. This are the things I know now:

Mathematics - Currently in pre-calculus Well Mathematics in my country is pretty unstructured. You would be studying bits of everything, and not one after the other. So I self studied up to Algebra II (Algebra I, geometry) so that I can cover it in more depth than in my school, though in school I'm learning through trigonometry stuff, algebra I & II stuff and geometry in varying orders.


1.Knows the basics of C, Python, C++(main currently learning)

CS50X completed

HTML,CSS ,JS and sqlite3 with python

What I want to learn for competitive programming(I am unsure):

Discrete Mathematics Algorithms Data Structures 4.Dynamic Programming

and I am hoping you'll help me to structure the remaining necessities and knowledge required. I found some blogs at many places but they were incomplete i.e. they are not well enough for beginners to you know get started on.

I am aiming currently for IOI.


I am from India.

National qualifications:

These are the stages of IOI qualification in my country:

1.Zonal Olympiads - Either written(pen & paper) or Programming or both (about 500-800 participants in each)

  1. Next round National Olympiads if qualified in previous (about 250 - 400 participants)

3.Next if qualified National training camp(about 30)

4.Top 4 are chosen from it to represent at IOI.

Edit: I am from India.

Edit: I am currently taking discrete mathematics online.

I believe I know where to practice.

Which should be first book/course/material to learn?

  • $\begingroup$ Nice that the question comes during Advent season. Get some practice now with Advent of Code. Have a little fun at the same time. $\endgroup$ – Gypsy Spellweaver Dec 9 '20 at 2:54
  • 2
    $\begingroup$ This site is quite good: cp-algorithms.com $\endgroup$ – kaya3 Dec 9 '20 at 19:53
  • $\begingroup$ @kaya3 it is an excellent resource. Thank you. $\endgroup$ – Neelesh V Dec 18 '20 at 3:21

If your aiming for the IOI, the first step has to be figuring out how to get onto your country's delegation. In the USA (where I am), that means USACO. If not, then you will have to determine what that pathway is. Every country has some method of determining delegates.

The next step would depend a lot on how those delegations are formed within your country. You may have to join a team, and there will presumably be some sort of coach. Most of your preparation and learning will probably focus on the competition used in your country.

And in terms of what to study, the competition itself looks to be very, very focused on algorithms. Until you can find more specific resources to the competitions within your own nation, you could spend time practicing the older, published IOI problems and Project Euler problems, which seem similar in nature.

It's hard to be more specific than that without knowing your country of origin.

Good luck!!

  • $\begingroup$ I am from India. $\endgroup$ – Neelesh V Dec 9 '20 at 4:17
  • $\begingroup$ I understand why you did the edit.Thanks. $\endgroup$ – Neelesh V Dec 9 '20 at 15:39

Ben's answer on how to find and join a team is spot on. I'll address what you should be studying.

Competitive programming generally is about correct use of algorithms and data structures. There are college courses available on youtube for mastering that subject. At a bare minimum, you should be comfortable implementing a linked list, graph, stack, heap, and binary search tree from scratch (a lot of these require recursion). Once you've mastered those, try to find an algorithm that is reliant on each one to help you build pattern recognition for quickly identifying when a problem calls for a certain structure.

So many problems are graph problems at their core (including most tree problems), so expanding in that area is always good. Dynamic programming will be useful as you approach upper level problems that have strict space and runtime requirements.

Good luck, and remember that programming is not always linear progression. You may struggle for months and have a major breakthrough when you least expect it.


I can recommend two things. Project Euler is great for sharpening your algorithmic skills. Also, you can sign up for USACO's training program. It is excellent and you can compete in the USACO competition. It's completely free.

  • 1
    $\begingroup$ Go through the first hundred or so Project Euler questions, than tackle #120, 140, 160 etc. when things get interesting. See if you can solve problems with less than 200 answers. $\endgroup$ – gnasher729 Dec 10 '20 at 11:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.