Preparing for IOI

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. :slight_smile:

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!
    11 Likes

    I think bruteforce is the most basic skill:

    BFS, DFS, combination and permutation generation.

    2 Likes

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

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

    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. :)

    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/

    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!

    @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.

    All the best dear :slight_smile:

    2 Likes

    You can add some topics too @vijju123 :stuck_out_tongue:

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

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

    Sure, please feel free to add anything you would like :slight_smile:

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

    Great initiative @ista2000

    But not one contribution from anyone :frowning:

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

    https://www.quora.com/What-algorithms-and-data-structures-should-I-learn-for-ZCO-and-INOI

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

    Thank you :slight_smile:

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

    U r welcome :)Btw those links were helpful.

    1 Like