-
Introduction to Competitive Programming
- Overview of competitive programming.
- Setting up the environment (IDE, compilers).
-
Basic Input/Output
- Handling standard input and output.
- Using files for input and output.
-
Basic Data Structures
- Arrays.
- Strings.
- Linked Lists.
-
Basic Algorithms
- Sorting (Bubble Sort, Selection Sort, Insertion Sort).
- Searching (Linear Search, Binary Search).
- Introduction to complexity analysis (Big O notation).
-
Basic Math
- Number theory (GCD, LCM, prime numbers).
- Basic combinatorics (factorials, combinations, permutations).
-
Advanced Data Structures
- Stacks and Queues.
- Hash Tables and Hashing.
- Heaps and Priority Queues.
- Trees (Binary Trees, Binary Search Trees).
-
Graph Theory
- Graph representations (adjacency matrix, adjacency list).
- Breadth-First Search (BFS).
- Depth-First Search (DFS).
- Shortest Path Algorithms (Dijkstra’s, Bellman-Ford).
-
Dynamic Programming
- Basic concepts and state transition.
- Memoization vs Tabulation.
- Common DP problems (Knapsack, Longest Increasing Subsequence, etc.).
-
Greedy Algorithms
- Concept of greedy choice.
- Common greedy problems (Activity Selection, Huffman Coding).
-
Advanced Math
- Modular arithmetic.
- Matrix exponentiation.
- Probability and combinatorics.
-
Advanced Data Structures
- Segment Trees.
- Fenwick Trees (Binary Indexed Trees).
- Disjoint Set Union (Union-Find).
- Suffix Arrays and Suffix Trees.
- Tries.
-
Advanced Graph Theory
- Minimum Spanning Trees (Kruskal’s, Prim’s).
- Network Flow (Ford-Fulkerson, Edmonds-Karp).
- Strongly Connected Components (Kosaraju’s, Tarjan’s).
- Topological Sorting.
- Eulerian and Hamiltonian Paths.
-
Advanced Dynamic Programming
- DP on Trees.
- DP with Bitmasks.
- DP on Graphs.
-
String Algorithms
- String Matching (Knuth-Morris-Pratt, Rabin-Karp).
- Z Algorithm.
- Suffix Arrays and LCP Array.
- Manacher’s Algorithm for Palindromes.
-
Geometry
- Basic geometry (points, lines, polygons).
- Convex Hull (Graham’s Scan, Andrew’s Algorithm).
- Line Intersection.
- Closest Pair of Points.
- Computational Geometry algorithms.
-
Game Theory
- Grundy Numbers.
- Nim Game.
- Minimax algorithm.
-
Advanced Number Theory
- Sieve of Eratosthenes.
- Extended Euclidean Algorithm.
- Chinese Remainder Theorem.
- Fermat’s Little Theorem.
- Fast Exponentiation.
- Pollard’s Rho Algorithm for Prime Factorization.
-
Advanced Graph Theory
- Planar Graphs.
- Graph Coloring.
- Graph Isomorphism.
-
Advanced Techniques
- Mo’s Algorithm.
- Heavy Light Decomposition.
- Dynamic Trees (Link-Cut Trees).
- Persistent Data Structures.
-
Problem-Solving Techniques
- Breaking down complex problems.
- Identifying patterns.
- Simplifying problems.
-
Competitive Programming Practices
- Participating in online contests.
- Practicing previous IOI problems.
- Time management during contests.
-
Optimization Techniques
- Reducing time complexity.
- Reducing space complexity.
- Trade-offs and approximations.
-
Advanced Trees
- AVL Trees, Red-Black Trees.
- Splay Trees.
- Treaps.
- K-D Trees.
- Interval Trees.
- Segment Trees with Lazy Propagation.
- Persistent Segment Trees.
- Heavy-Light Decomposition.
- Dynamic Trees (Link-Cut Trees).
-
Advanced Heaps
- Fibonacci Heaps.
- Pairing Heaps.
- Binomial Heaps.
-
Persistent Data Structures
- Persistent Arrays.
- Persistent Stacks and Queues.
- Persistent Segment Trees.
-
Sparse Tables
- Range Minimum Query (RMQ).
- Least Common Ancestor (LCA).
-
Graph Algorithms
- Centroid Decomposition.
- Articulation Points and Bridges.
- 2-SAT Problem.
- Planarity Testing.
- Tree Isomorphism.
- Blossom Algorithm for Maximum Matching.
- Dynamic Connectivity.
-
Dynamic Programming on Trees and Graphs
- Tree DP.
- DP on DAGs.
- Knuth’s Optimization.
- Divide and Conquer DP.
- Slope Trick.
-
Advanced String Algorithms
- Aho-Corasick Algorithm.
- Suffix Automaton.
- Suffix Trees.
- Exponential Search.
- Sparse Dynamic Programming.
-
Geometry
- Convex Hull Trick.
- Sweep Line Algorithm.
- Voronoi Diagrams.
- Delaunay Triangulation.
- Rotating Calipers.
- 3D Geometry.
-
Approximation Algorithms
- Greedy Algorithms.
- Local Search Algorithms.
- PTAS and FPTAS.
-
Number Theory
- Euler’s Totient Function.
- Modular Inverse.
- Integer Factorization.
- Discrete Logarithm Problem.
- Elliptic Curve Cryptography.
-
Polynomial Algorithms
- Fast Fourier Transform (FFT).
- Number Theoretic Transform (NTT).
- Polynomial Multiplication and Division.
- Multipoint Evaluation.
- Interpolation.
-
Matrix Algorithms
- Strassen’s Algorithm.
- Matrix Exponentiation.
- Rank and Inversion of Matrices.
- Determinants and Applications.
-
Game Theory
- Combinatorial Game Theory.
- Sprague-Grundy Theorem.
- Impartial and Partisan Games.
- Alpha-Beta Pruning.
-
Advanced Combinatorics
- Inclusion-Exclusion Principle.
- Pigeonhole Principle.
- Generating Functions.
- Burnside's Lemma.
- Polya’s Enumeration Theorem.
-
Network Flow
- Dinic’s Algorithm.
- Push-Relabel Algorithm.
- Min-Cost Max Flow.
- Bipartite Graph Matching.
- Flow with Demands.
-
Heuristics
- Simulated Annealing.
- Genetic Algorithms.
- Ant Colony Optimization.
-
Advanced Search Techniques
- Beam Search.
- Iterative Deepening.
- Bidirectional Search.
- A* Algorithm.
-
Meta-Programming
- Bit Manipulation Tricks.
- Template Metaprogramming in C++.
- Efficient Use of STL and Boost Libraries.
-
Parallel Algorithms
- Parallel Sorting Algorithms.
- Parallel Dynamic Programming.
- Use of OpenMP and MPI for Parallelism.
-
Books
- "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein.
- "Competitive Programming" by Steven Halim.
- "Algorithm Design Manual" by Steven Skiena.
- "The Art of Computer Programming" by Donald Knuth.
- "Advanced Data Structures" by Peter Brass.
- "Approximation Algorithms" by Vijay V. Vazirani.
- "Computational Geometry: Algorithms and Applications" by Mark de Berg.
-
Online Courses and Lectures
- MIT OpenCourseWare (OCW).
- Coursera (Algorithms Specializations).
- edX (Algorithmic Design and Techniques).
- TopCoder University.
-
Competitive Programming Websites
- Codeforces.
- TopCoder.
- AtCoder.
- CodeChef.
- HackerRank.
- LeetCode.
- SPOJ.
-
Practice Contests and Platforms
- ICPC Live Archive.
- Kattis.
- Timus Online Judge.
- Google Code Jam Archives.
- Facebook Hacker Cup Archives.
- UVa Online Judge.
- CodeChef.
- CSES Problem Set.
-
Regular Participation in Contests
- Participate in regular online contests on platforms like Codeforces, AtCoder, and CodeChef.
- Engage in virtual contests to simulate the ICPC environment.
-
Group Study and Discussions
- Form study groups to discuss problems and solutions.
- Participate in mock contests and team problem-solving sessions.
-
Deep Dive into Problem Analysis
- Analyze previous ICPC problems and their solutions.
- Study the problem-solving techniques used by top coders.
-
Personal Projects
- Develop small projects to implement and visualize algorithms.
- Contribute to open-source projects related to algorithm implementations.
-
Review and Refactor Code
- Regularly review and optimize your code.
- Learn to write clean, efficient, and bug-free code.
This comprehensive syllabus aims to provide a structured path for ICPC training, covering advanced topics and problem-solving techniques necessary for excelling in the competition.