<p>Ben's answer on how to find and join a team is spot on.  I'll address what you should be studying.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>

CC BY-SA 4.0
2020-12-09T02:42:01.293Z
2020-12-09T02:42:01.293Z
guitarcat
<p>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.</p>

CC BY-SA 4.0
2020-12-10T11:40:20.080Z
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.
gnasher729
CC BY-SA 4.0
2020-12-09T22:35:32.913Z
2020-12-09T22:35:32.913Z
ncmathsadist
<p>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.</p>
<p>The next step would depend a <em>lot</em> 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.</p>
<p>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 <a href="https://ioinformatics.org/page/contests/10" rel="noreferrer">older, published IOI problems</a> and <a href="https://projecteuler.net/" rel="noreferrer">Project Euler</a> problems, which seem similar in nature.</p>
<p>It's hard to be more specific than that without knowing your country of origin.</p>
<p>Good luck!!</p>

CC BY-SA 4.0
2020-12-09T04:17:35.920Z
I am from India.
Neelesh V
CC BY-SA 4.0
2020-12-09T02:22:43.963Z
2020-12-09T02:22:43.963Z
Ben I.
<p>I am currently in the 10th grade. I would like to get started in competitive programming. This are the things I know now:</p>
<p>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 &amp; II stuff and geometry in varying orders.</p>
<p>Programming:</p>
<p>1.Knows the basics of C, Python, C++(main currently learning)</p>
<p>CS50X completed</p>
<p>HTML,CSS ,JS and sqlite3 with python</p>
<p>What I want to learn for competitive programming(I am unsure):</p>
<p>Discrete Mathematics
Algorithms
Data Structures
4.Dynamic Programming</p>
<p>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.</p>
<p>I am aiming currently for IOI.</p>
<p>UPDATE:</p>
<p>I am from India.</p>
<p>National qualifications:</p>
<p>These are the stages of IOI qualification in my country:</p>
<p>1.Zonal Olympiads - Either written(pen &amp; paper) or Programming or both
(about 500-800 participants in each)</p>
<ol start="2">
<li>Next round National Olympiads if qualified in previous (about 250 - 400 participants)</li>
</ol>
<p>3.Next if qualified National training camp(about 30)</p>
<p>4.Top 4 are chosen from it to represent at IOI.</p>
<p><strong>Edit: I am from India.</strong></p>
<p><strong>Edit: I am currently taking discrete mathematics online.</strong></p>
<p><strong>I believe I know where to practice.</strong></p>
<p><strong>Which should be first book/course/material to learn?</strong></p>

CC BY-SA 4.0
2020-12-09T02:54:31.320Z
Nice that the question comes during Advent season. Get some practice now with [Advent of Code](https://adventofcode.com/). Have a little fun at the same time.
Gypsy Spellweaver
CC BY-SA 4.0
2020-12-09T19:53:05.540Z
This site is quite good: https://cp-algorithms.com/
kaya3
CC BY-SA 4.0
2020-12-18T03:21:29.020Z
@kaya3 it is an excellent resource. Thank you.
Neelesh V
<self-learning><resource-request><programming><textbook>
What and where should I study for competitive programming?
# What and where should I study for competitive programming?

(Asked by: username_0 on 2020-12-09)

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.

Programming:

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.

UPDATE:

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)

2. 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?**

**Tags:** self-learning, resource-request, programming, textbook

> **Comments:**
> **username_1**: Nice that the question comes during Advent season. Get some practice now with [Advent of Code](https://adventofcode.com/). Have a little fun at the same time.  
> **username_2**: This site is quite good: https://cp-algorithms.com/  
> **username_0**: @username_2 it is an excellent resource. Thank you.  

---

## 3 answers

### Answer by username_6 on 2020-12-09. Score: 8 | Accepted answer

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](https://ioinformatics.org/page/contests/10) and [Project Euler](https://projecteuler.net/) problems, which seem similar in nature.

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

Good luck!!

> **Comments:**
> **username_0**: I am from India.  

---

### Answer by username_3 on 2020-12-09. Score: 6

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.


---

### Answer by username_4 on 2020-12-09. Score: 1

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.

> **Comments:**
> **username_5**: 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.  

---

