## 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