The aim of this course is to familiarize students with advanced programming skills used in programming competitions such as ICPC. The prerequisite for this course is the Data Structures and Algorithms course.
- Geometric Algorithms (2 sessions)
- Basic Concepts
- Geometric Operations
- Convex Hull
- Sample Geometric Problems
- Graph Algorithms (2 sessions)
- Largest Common Subtree and its Applications
- Maximum Flow
- Dynamic Programming (2 sessions)
- Longest Increasing Subsequence
- 2D Dynamic Programming (Edit Distance)
- Interval Dynamic Programming (Optimal Matrix Chain Multiplication)
- Tree Dynamic Programming (Calculating the Largest Weighted Independent Set on a Tree)
- Exponential Dynamic Programming (Finding Hamiltonian Path in a Graph)
- Linear Algebra (1 session)
- Equations and Unknowns
- Problem Solving with Matrix Multiplication
- Number Theory (1 session)
- GCD and Equation ax+by=c
- Chinese Remainder Theorem
- String Algorithms (2 sessions)
- Trie
- Suffix Array
- Knuth-Morris-Pratt Algorithm
- STL Library (1 session)
- Containers
- Iterators
- Algorithms
- Competitive Strategy (1 session)
- General Strategies for Competitive Programming Contests
- Stress Management
- Time Management
- Teamwork
- Rules for Implementing Solutions with Complex Code
- Practical Exercises
- S. Halim, F. Halim, and S. Effendy. Competitive Programming 4. The new lower bound of programming contests in the 2020s. Lulu, 2020.