Competitive Programming
About this course
The goal of this course is to teach you algorithms for competitive programming. Even though it is designed for competitive programming, we believe that it will be interesting for any computer scientist wishing to improve his algorithmic and data structure design skills.
List of exercises
Introduction
Slack
Hello World
Ad-hoc - Problem: Tournament adversaries
Data Structures - Linked list
Data Structures - Linked list implementation
Graphs - Representation
Graphs - Finding a path
Graphs - Solving a maze
Graphs - Breadth-first search
Graphs - Connected components
Graphs - Problem: Fire!
Graphs - Problem: Cross Bracing
Graphs - Bipartite
Graphs - Topological sort
Graphs - Depth-first search: cycle finding
Graphs - DFS: topological order
Graphs - Strongly connected components
Graphs - Problem: Dominos
Graphs - Dijkstra
Graphs - Maximum flow (Edmonds-Karp)
Graphs - Maximum flow runtime
DP - Introduction
DP - Knapsack
DP - Top down VS Bottom up
DP - State graph
DP - Shortest paths: Acyclic formulation
DP - Knapsack, build the solution
DP - Memory reduction
DP - Knapsack flipping the state formulation
DP - Candy problem, parameter decution
DP - Problem: Copying books
DP - Problem: Knockout Tournament
DP - Problem: Forming Quiz Teams
Binary search - Introduction
Binary search - Square root
Binary search - Search on the answer
Binary Search - Problem: Glyph Recognition
Techniques - Brute force on solution structure
Techniques - Problem: Iron and Coal
Geometry - Introduction
Geometry - 2D Rotation
Geometry - Cross product
Geometry - Point orientation
Geometry - Point in convex polygon
Geometry - Problem: Align polygon
Contest 1 2019 - A
Contest 1 2019 - B
Contest 1 2019 - C
Contest 1 2019 - D
Contest 1 2019 - E
Contest 1 2019 - Editorial