# Preparing for IOI

**URL:** <https://discuss.codechef.com/t/preparing-for-ioi/15894>\
**Category:** general\
**Tags:** olympiad, preparation\
**Created:** [August 7, 2017, 3:58pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894 "2017-08-07T15:58:04Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 7, 2017, 3:58pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/1 "2017-08-07T15:58:04Z")

</div>

Hello people,

I wanted to have a chronological order for all the topics for the preparation of IOI and that is why I am creating this thread. The main motive is that my school has allowed me and other interested students to form a group to start preparing students for OIs. I will be introducing it to the junior classes. So, it would be nice if the order started from the very basics and went to intermediate or even advanced if people are willing to contribute. This is a community wiki so feel free to edit it for the help of myself and all those who prepare for IOI in present or future. 🙂

I know that these exist:

- http://discuss.codechef.com/questions/18752/what-are-the-must-known-algorithms-for-online-programming-contests
- http://www.quora.com/Algorithms/What-are-the-10-algorithms-one-must-know-in-order-to-solve-most-algorithm-challenges-puzzles
- http://www.quora.com/Competitive-Programming/What-are-all-of-the-algorithms-you-should-know-to-perform-well-in-Codeforces

But non of these are "chronologically ordered". Topics are better ordered with increasing order of difficulty, starting from changing from Turbo C++ to GNU C++11.

For now, I am creating a very rough order. I hope more people contribute to it. Also, I will keep editing it till I can. 🙂

1. Big O Notation
2. Ad hoc problems
3. Brute force
  - Using DFS
  - Using BFS
  - Permutation generation
  - Subset generation

4. Maths

- [Bit-Manipulation][1]
- [Hash-Tables][2]

- Greedy
- Data structures(Excluding graph)
- Arrays
- Strings
- Vectors
- Stack
- Queue
- Heap
- List
- Deque

- Divide and conquer
- Binary search(In an array/On answer)
- Merge sort
- Segment tree
- Merge sort tree
- Centroid decomposition

- Dynamic Programming
- Introduction(Possibly using the classic fibonacci example)
- LCS/LIS
- Edit Distance
- Knapsack
- Matrix Chain multiplication

- Graphs
- BFS/DFS
- Flood Fill
- Shortest Path algos
- MST

- String algos
P.S. Add subtopics as subcategories :)

Thank you in advance to all who contribute!

---

<div class="post-metadata">

**Author:** ![vasja](https://www.codechef.com/sites/all/themes/abessive/images/user_default_thumb.jpg) [@vasja](https://discuss.codechef.com/u/vasja)\
**Post date:** [August 7, 2017, 11:28pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/2 "2017-08-07T23:28:01Z")

</div>

I think bruteforce is the most basic skill:

BFS, DFS, combination and permutation generation.

---

<div class="post-metadata">

**Author:** ![hruday968](https://www.codechef.com/sites/all/themes/abessive/images/user_default_thumb.jpg) [@hruday968](https://discuss.codechef.com/u/hruday968)\
**Post date:** [August 8, 2017, 11:09am UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/3 "2017-08-08T11:09:04Z")

</div>

Most of the students love maths,so i think number theory will be good after bruteforce.

---

<div class="post-metadata">

**Author:** ![dishant\_18](https://discuss.codechef.com/user_avatar/discuss.codechef.com/dishant_18/32/21_2.png) [@dishant\_18](https://discuss.codechef.com/u/dishant_18)\
**Post date:** [August 8, 2017, 1:41pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/4 "2017-08-08T13:41:07Z")

</div>

Well probably there must be something related to STL of C++ as well. Being honest I didn’t know much regarding it at start 😛

---

<div class="post-metadata">

**Author:** ![vishesh\_345](https://www.codechef.com/sites/all/themes/abessive/images/user_default_thumb.jpg) [@vishesh\_345](https://discuss.codechef.com/u/vishesh_345)\
**Post date:** [August 10, 2017, 3:30pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/5 "2017-08-10T15:30:41Z")

</div>

Hey @ista2000 It is really good that you have started it. You can take help from forums too. They include quite good topics. Moreover talking about number theory you can add topics like

```
  1.Euler totient function.
    
    2.Matrix Exponentiation(Not sure whether it's a part of number theory but it is quite useful when you work on recursive function).

3.Fermat Little Theorem is also very important sometimes (in modulo functions)

 4.Lastly I remember a topic SOS Dynamic Programming approach. If you want to add. :)
```

---

<div class="post-metadata">

**Author:** ![sandeep\_007](https://www.codechef.com/sites/all/themes/abessive/images/user_default_thumb.jpg) [@sandeep\_007](https://discuss.codechef.com/u/sandeep_007)\
**Post date:** [August 14, 2017, 8:21pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/6 "2017-08-14T20:21:50Z")

</div>

**Bit-Manipulation**

[https://www.hackerearth.com/practice/notes/bit-manipulation/](https://www.hackerearth.com/practice/notes/bit-manipulation/)

**Hashing**

[https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/)

Please add these two topics also after maths, because these topics are more often asked in almost all the contest. Otherwise, the order is great.

Hope this helps!

---

<div class="post-metadata">

**Author:** ![itachi\_2016](https://discuss.codechef.com/user_avatar/discuss.codechef.com/itachi_2016/32/6615_2.png) [@itachi\_2016](https://discuss.codechef.com/u/itachi_2016)\
**Post date:** [August 20, 2017, 7:14pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/7 "2017-08-20T19:14:05Z")

</div>

@ista2000 if it is possible then please provide us with links to these topics as there is much information on web and finding a better resource may not be possible for noobs like me so please help by adding links. Anyways nice initiative.

---

<div class="post-metadata">

**Author:** ![vijju123](https://discuss.codechef.com/user_avatar/discuss.codechef.com/vijju123/32/195207_2.png) [@vijju123](https://discuss.codechef.com/u/vijju123)\
**Post date:** [August 7, 2017, 4:03pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/8 "2017-08-07T16:03:25Z")

</div>

All the best dear 🙂

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 7, 2017, 4:06pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/9 "2017-08-07T16:06:31Z")

</div>

You can add some topics too @vijju123 😛

---

<div class="post-metadata">

**Author:** ![liaojh](https://discuss.codechef.com/user_avatar/discuss.codechef.com/liaojh/32/8713_2.png) [@liaojh](https://discuss.codechef.com/u/liaojh)\
**Post date:** [August 8, 2017, 1:52am UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/10 "2017-08-08T01:52:26Z")

</div>

I second this. Without brute force you’ll never know if your solution is correct.

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 8, 2017, 2:03am UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/11 "2017-08-08T02:03:20Z")

</div>

Thank you, you can edit the original post though. 🙂  
The only reason I put it out because I most likely will miss some topics.

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 8, 2017, 2:49pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/12 "2017-08-08T14:49:37Z")

</div>

Sure, please feel free to add anything you would like 🙂

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 8, 2017, 2:50pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/13 "2017-08-08T14:50:05Z")

</div>

Please do add anything you want to suggest. That’s the whole point of marking it as a community wiki

---

<div class="post-metadata">

**Author:** ![akashbhalotia](https://discuss.codechef.com/user_avatar/discuss.codechef.com/akashbhalotia/32/96764_2.png) [@akashbhalotia](https://discuss.codechef.com/u/akashbhalotia)\
**Post date:** [August 9, 2017, 10:25pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/14 "2017-08-09T22:25:43Z")

</div>

Great initiative @ista2000

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 10, 2017, 5:57am UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/15 "2017-08-10T05:57:25Z")

</div>

But not one contribution from anyone ☹

---

<div class="post-metadata">

**Author:** ![dishant\_18](https://discuss.codechef.com/user_avatar/discuss.codechef.com/dishant_18/32/21_2.png) [@dishant\_18](https://discuss.codechef.com/u/dishant_18)\
**Post date:** [August 10, 2017, 11:15pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/16 "2017-08-10T23:15:51Z")

</div>

Can you tell me how can I add?  
P.S. I am not that familiar with this stuff. Sorry if its annoying question 😛

---

<div class="post-metadata">

**Author:** ![mathecodician](https://discuss.codechef.com/user_avatar/discuss.codechef.com/mathecodician/32/29889_2.png) [@mathecodician](https://discuss.codechef.com/u/mathecodician)\
**Post date:** [August 12, 2017, 8:01pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/17 "2017-08-12T20:01:16Z")

</div>

> **[What algorithms and data structures should I learn for ZCO and INOI?](https://www.quora.com/What-algorithms-and-data-structures-should-I-learn-for-ZCO-and-INOI)**
>
> Answer: Thanks for the A2A.
> 
> Sorry for the late response.
> 
> So, the official syllabus of ZCO and INOI is the IOI syllabus though they don’t give problems that hard because otherwise very less people would even get a partial point.
> 
> So seeing the past...

^^ This might be helpful although this just contains topics for ZCO and INOI.

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 12, 2017, 8:15pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/18 "2017-08-12T20:15:46Z")

</div>

Thank you 🙂

---

<div class="post-metadata">

**Author:** ![ista2000](https://discuss.codechef.com/user_avatar/discuss.codechef.com/ista2000/32/85671_2.png) [@ista2000](https://discuss.codechef.com/u/ista2000)\
**Post date:** [August 12, 2017, 8:43pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/19 "2017-08-12T20:43:55Z")

</div>

@mathecodician It will also be good if you add one or two topics ;\_;

---

<div class="post-metadata">

**Author:** ![vishesh\_345](https://www.codechef.com/sites/all/themes/abessive/images/user_default_thumb.jpg) [@vishesh\_345](https://discuss.codechef.com/u/vishesh_345)\
**Post date:** [August 13, 2017, 2:25pm UTC](https://discuss.codechef.com/t/preparing-for-ioi/15894/20 "2017-08-13T14:25:12Z")

</div>

U r welcome :)Btw those links were helpful.

[Next page](https://discuss.codechef.com/t/preparing-for-ioi/15894.md?page=2)
