# Competitive Programming

Getting Started

What is Competitive Programming?

A summary of modern C++ features

Number

Introduction to Prime Numbers

Sieve of Eratosthenes

Rabin-Miller’s Test for Primality

GCD, LCM and Euclidean Algorithm Extended

Chinese Remainder Theorem

Euler’s totient function

Basics of Factorization And Combinatorics

Search

Binary Search

Ternary Search

String

Z-algorithm

KMP Algorithm

Suffix Array

Aho Corasick

Geometry

Center and Radius of a circle given 3 points

The angle between 2 vectors

Area of a triangle

Rotate a point around another point

Equation of line passing through 2 points

Equation of a circle given center and radius

Collinearity of 3 points

Orthogonality of 2 lines

Sweep Line Algorithm for Closest Pair problem

Pick Theorem

Convex Hull

Dynamic Programming

Convex Hull Trick

Graph

Disjoint Set Union

Strongly Connected Component – Tarjan Algorithm

Two-Sat (2-SAT)

Articulation Points

Bridges

Warshall-Floyd Algorithm

Bellman-Ford Algorithm

Dijkstra Algorithm

Flow

Dinic Algorithm (1)

Dinic Algorithm (2)

Maximum Matching on Bipartite Graph – Hungarian Algorithm

Min Cost Max Flow

Range Query

Binary Indexed Tree (BIT)

Binary Indexed Tree 2D (BIT-2D)

Segment Tree

Heavy-Light Decomposition

SQRT Decomposition on Tree

Centroid Decomposition

Matrix

Matrix Computation

Scheduling

Johnson Rule

Hashing

Introduction to Hashing

Game Theory