This repository hosts all the course materials created for the beOI (Belgian Olympiad in Informatics) and beCP (Belgian Competitive Programming) training camps. Remember though that You don't need advanced topics for bronze and maybe even for silver (Bruno Ploumhans, 2018, Line 21).
The program is now structured into a set of teaching units, designed to cover the whole IOI syllabus (and some additional material from the CP3 book). Each unit contains the slides used and a README which outlines the content of the unit, lists the prerequisites and gives links to related exercises. The units are not originally meant to be in a logical order.
The resources made prior to the units system are available in the archive directory.
Here is the list of completed and planned teaching units. As they are still under construction, the units might not contain all the topics mentioned in the parentheses.
- Algorithms and complexity (big oh, practical limits)
- Linear data structures (array, bitset, vector, linked list, stack, queue)
- Sorting algorithms (selection, insertion, merge, quick)
- Tree data structures (set, map, heap)
- Balanced binary search tree (treap, red-black, order statistics with library)
- Graph basics and representation (adjacency matrix, adjacency list)
- Union-find structure
- Segment tree (regular, lazy)
- Fenwick tree (binary indexing, least significant bit)
- Recursive backtracking (pruning, bitmasks)
- Binary search (nontrivial applications, binary search the answer)
- Greedy (basic idea, coin change, load balancing, interval scheduling)
- Dynamic programming I (top-down, bottom-up, classical problems)
- Graph traversal (DFS, BFS, toposort, bipartite check, Kosaraju SCC)
- Specialized DFS (cycle check, articulation point, bridge, Tarjan SCC)
- Minimum spanning tree (Kruskal, Prim, variants, minimax/maximin path)
- Single-source shortest path (review BFS, Dijkstra, Bellman-Ford)
- All-pairs shortest path (Floyd-Warshall, applications)
- Network flow (Edmonds-Karp, min cut, vertex capacity, vertex/edge-disjoint paths, MCMF)
- Directed acyclic graph (longest/shortest/counting paths, tree MVC)
- Eulerian path (eulerian check, finding the path/cycle, Chinese postman problem)
- Bipartite graph and MCBM (augmenting path algorithm, MIS, MVC, min path cover on DAG)
- Miscellaneous math (fast pow, Fibonacci, powers of adjacency matrix, tortoise and hare)
- Number theory (GCD, prime factors, sieve, extended Euclid)
- Game theory (subtraction/Nim game, minimax, alpha-beta)
- String processing (trie, Rabin-Karp, Z-algorithm, KMP)
- Computational geometry (basics, polygon area, convex hull)
- Advanced search techniques (heavy pruning, meet in the middle, A*)
- Dynamic programming II (bitmask, drop one parameter, bitonic TSP, sliding window)
- Problem decomposition
- Advanced graph problems (2-SAT, MWIS (tree, bipartite))
- Sparse table, lowest common ancestor