The Hitchhiker’s Guide to the Programming Contests

January 17, 2017 | Author: dpiklu | Category: N/A
Share Embed Donate


Short Description

Download The Hitchhiker’s Guide to the Programming Contests...

Description

The Hitchhiker’s Guide to the Programming Contests

Do Panic

Nite Nimajneb

Contents 1 Dynamic Programming 1.1 Subset Sum . . . . . . . . . . . . . . . . . . 1.2 The Longest Increasing Subsequence . . . . 1.3 Longest Common Subsequence . . . . . . . 1.3.1 Reduce the Space to One Dimension 1.4 Max Sum on a Line . . . . . . . . . . . . . 1.5 The Best Triangulation . . . . . . . . . . . 1.6 Counting or Optimizing Good Paths . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

1 1 1 2 3 3 3 4

2 Graphs 2.1 Breadth First Search . . . . . . . . . . . . . . . 2.2 Depth First Search . . . . . . . . . . . . . . . . 2.2.1 Topological Sorting . . . . . . . . . . . . 2.2.2 Strongly Connected Components . . . . 2.2.3 Cut Point . . . . . . . . . . . . . . . . . 2.3 Shortest Paths . . . . . . . . . . . . . . . . . . 2.3.1 Bellman-Ford . . . . . . . . . . . . . . . 2.3.2 Floyd-Warshall . . . . . . . . . . . . . . 2.3.3 Dijkstra . . . . . . . . . . . . . . . . . . 2.3.4 The Shortest Path DAG . . . . . . . . . 2.4 Counting the Paths . . . . . . . . . . . . . . . . 2.5 The Minimum Average Cycle . . . . . . . . . . 2.6 The Minimum Spanning Tree . . . . . . . . . . 2.7 Bipartite Matching . . . . . . . . . . . . . . . . 2.8 Maximum Flows . . . . . . . . . . . . . . . . . 2.9 Minimum (Maximum) Cost Bipartite Matching 2.10 Minimum Cost (Maximum Profit) Flow . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

5 5 6 7 7 9 9 9 10 10 12 13 14 15 17 19 21 22

3 Numbers 3.1 the Greatest Common Divisor . . . . . 3.2 Generating the Prime Table . . . . . . 3.3 Repeated Squaring . . . . . . . . . . . 3.4 Long Integers using Character Arrays 3.5 Fractional Numbers . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

22 23 23 24 25 30

. . . . .

. . . . .

. . . . .

. . . . . . .

. . . . .

. . . . .

4 Algebra 31 4.1 the Matrix Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2 the Method of Relaxation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5 Geometry 35 5.1 the Geometry Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2 Some Geometric Facts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6 Miscellaneous 6.1 Binary Search . . . . . . . . . . . . . . . . . . 6.2 Range Query . . . . . . . . . . . . . . . . . . 6.3 Set Union and Find . . . . . . . . . . . . . . 6.4 String Matching . . . . . . . . . . . . . . . . 6.5 2D Arrays, Rectangles . . . . . . . . . . . . . 6.5.1 Cover the Chessboard with Rectangles

i

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

47 47 47 48 49 50 50

6.5.2 6.5.3 7 The 7.1 7.2 7.3

7.4

2D Max Sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Max Unaffected Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sample Programs Combinatorics . . . . . . Dynamic Programming . Graphs . . . . . . . . . . . 7.3.1 BFS . . . . . . . . 7.3.2 DFS . . . . . . . . 7.3.3 Max Flow . . . . . 7.3.4 Min Cost Flow and Long Integers . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matching . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

ii

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

52 52 53 53 56 59 59 61 63 66 71

1

Dynamic Programming

1.1

Subset Sum

Problem 1.1 Given a set of n numbers ai sum up to M , and any K ≤ M , whether there is a subset of the numbers such that they sum up to (hit) K? We assume n might be as big as 1000, but M or K is not too big. From the Guide: We use a one dimensional table m[0..M], m[b] indicate whether b can be hit. Outline: Subset Sum int m[M+10]; for(i=0; i?= m[j]+1; } ans = 0; for(i=0; i?= m[i]; There are three other versions: descending, non-descending, non-increasing. You just need to change a bit in the program. The following improvement is really cute. It is a nice exercise to prove or to believe why it is correct. Outline: O(n log n) algorithm for The LIS set st; set::iterator it; ... st.clear(); for(i=0; i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF