Algorithm Contest Problem Summary
Advanced Algorithms
Advanced Data Structures
- Segment Tree
- POJ 2528 Mayor’s posters
- Given posters and their placement order, find number of posters visible.
- Segment tree with lazy update.
- POJ 2777 Count Color
- Range update, range query for number of different elements.
- Use bitmap to mark elements.
- If using plain array for segment tree, we need O(4L) space because it might not be a complete binary tree.
- POJ 2750 Potted Flower
- Given a number circle and modification instructions, find maximum arc after each instruction but not the full circle.
- Represent the circle by a chain. max_arc = max(max_chain, sum - min_chain) if max_chain != sum else sum - min_chain.
- POJ 2482 Stars in Your Window
- Given points with values and a fixed-size box, find maximum value that can be bounded.
- Each point can be represented by a Y-axis segment, and scan along X axis.
- POJ 3264 Balanced Lineup
- Range min/max query.
- POJ 3368 Frequent values
- Range query most frequent number.
- Actually a DP problem, for each segment maintains (maxCnt, minVal, minCnt, maxVal, maxCnt).
- POJ 2528 Mayor’s posters
- Binary Index Tree
- POJ 2828 Buy Tickets
- Finish insertion sort given the insertion sequence.
- Reverse the insertion sequence. Maintain slots remaining in [0, m], and binary search for the position with valid slots for each insertion.
- POJ 2886 Who Gets the Most Candies?
- Given a circle made by children. Each child has an offset. Each time we delete a child from the circle and find the next child according to the offset. The p-th child deleted got number-of-p’s-divisors score. Find the child with maximum score.
- Maintain slots remaining in [0, m], similar to 2828.
- Number of divisors are calculated by sieve method.
- POJ 2352 Stars
- Given points, define level of a point as number of points in the left-down side of it.
- Process points in left-to-right, down-to-up order.
- POJ 1195 Mobile phones
- 2D point modification and range query
- 2D BIT, easy expansion from 1D case.
- POJ 2828 Buy Tickets
- Suffix Array
- USACO Music Theme
- DP solution by maintaining len[i][j], longest common prefix starting from i and j.
- USACO Hidden Passwords
- Sort rotates of a string.
- USACO Music Theme
Computational Geometry
- Lattice Point
- USACO Electric Fence
- Find lattice points in a triangle.
- USACO Electric Fence
- Convex Hull
- Graham Scan
- USACO Fencing the Cows
- Rectangle
- USACO Window Area
- Rectangle overlapping algorithm (floating-up); Cutting up, down, left and right.
- USACO Window Area
- Line Sweeping
- USACO Picture
- Find perimeter of stacked rectangles.
- USACO Picture
Dynamic Programming
- USACO Number Triangles
- Find maximum sum from root to leaf in a tree.
- USACO Subset Sums
- Find number of possible subsets adding to a number.
- Typical knapsack.
- USACO Longest Prefix
- Find the longest prefix of a string constructable by words from a dictionary.
- Use Trie with DP.
- USACO Cow Pedigrees
- Find number of possible complete binary trees with N nodes.
- Catalan number.
- USACO Money Systems
- Find number of ways to compose N given smaller numbers M1, M2, …, Mi.
- Typical complete knapsack.
- USACO Score Inflation
- 0/1 knapsack.
- USACO Stamps
- Find minimum number that cannot be summed to by at most K numbers drawn from a set.
- DP on minimum number of solution summed to M with first N numbers.
- USACO Stringsobits
- Find the k-th largest number having no more than N 1-bits.
- DP on number of N-length no more than M-1-bit numbers.
- USACO Shopping Offers
- Find the minimum cost to satisify a target combination with given combinations.
- Multiple dimension knapsack.
- USACO Home on the Range
- Find all squares in an area with obstacles.
- DP on maximum square edge size.
- USACO Raucous Rockers
- Store maximum number of songs in CDs with chronological order. (Brute force will also do though)
- DP on F[M][N][T], maximum of songs can put with first M songs, first N CD’s and last CD remaining time T.
- USACO Beef McNuggets
- Find minimum number that cannot be summed to by a set of numbers. Number usage is not limited.
- Extended euclid: ax + by = gcd(a, b). If gcd > 1, then no limit. If smallest number == 1, then all ok. Else, use method in Stamps. Exit once the following 256 bits are all 1.
- USACO Buy Low, Buy Lower
- Find number of unique longest decreasing subsequences.
- Find maximum length, then count unique ones. For i < j, if maxLen[i] + 1 == maxLen[j], then uniqNums[j] = uniqNums[i] if nums[i] == nums[j], uniqNums[j] = uniqNums[i] + uniqNums[j] if nums[i] < nums[j].
- USACO Milk Measuring
- Given a set of numbers and a target, find minimum subset, numbers drawn from which summed to the target.
- DFSID + DP validation also works.
- USACO Big Barn
- Find maximum square in an area with obstacles.
- USACO Canada Tour
- Hamilton circle on a straight line.
- F[m][n]: max city number from m -> start -> n. m is always <= n.
- USACO Character Recognition
- F[m] = min(F[m - 19] + cost(missing), F[m - 20] + cost(normal), F[m - 21] + cost(duplicate))
- USACO Two Five
- Very good question! See answer and solution on USACO for more details.
- POJ 1837 Balance
- Given a balance and weights and loadable positions, find number of balanced configurations.
- State: F[M][N], number of ways by which load N can be reached by first M weights.
- POJ 1276 Cash Machine
- 0/1 Knapsack with object number limit.
- Need binary optimization (2^0, 2^1, …, 2^k, N-(1+…+2^k)), where k is the maximum i.e. N-(…)>=0.
- POJ 2151 Check the difficulty of problems
- Probability DP. Given probability list, F[m][n]: probability of selecting n from m.
- POJ 3267 The Cow Lexicon
- Given a dictionary and a string, find minimum characters to remove from string to make the string compositable by words from the dictionary.
- For each position try drop or match each word in dictionary.
- POJ 1836 Alignment
- Given a line of soldiers, find minimum number of soldiers needed to move inorder to make each soldier in the line can see either left or right extremity.
- Strict LIS on both sides.
- POJ 1260 Pearls
- There are M classes of pearls and their value V. One has to pay 10 more units when buying any class of pearls. Better pearls can replace worse ones. Given a shopping list, find minimum cost.
- F[M][2]: minimum cost of buying highest M classes of pearls when buying the M-th class or not.
- POJ 2533 Longest Ordered Subsequence
- POJ 3176 Cow Bowling
- Typical triangle sum DP.
- POJ 1080 Human Gene Functions
- Typical weighted LCS.
- POJ 1159 Palindrome
- Given a string, find minimum inserts to make it palindrome.
- Let F[i][j] is minimum inserts between i and j. F[i][j] = min(F[i+1][j]+1, F[i][j-1]+1, F[i+1][j-1] only if s[i]==s[j]).
- POJ 1191 棋盘分割
- Given a weighted 8x8 chess board. You can cut one rectangle off for n times. Find minimum of variance of pieces.
- For each sub-rectangle, maintain minimum variance for cutting into x pieces.
- POJ 3280 Cheapest Palindrome
- Given a string, find minimum insert/deletes to make it palindrome.
- Similar to POJ 1159.
- POJ 2029 Get Many Persimmon Trees
- Given points and a rectangle, find maximum points boundable by the rectangle.
- Can do with prefix sum. 2D BIT solution similar to POJ 1195.
- POJ 2948 Martian Mining
- Given a grid, there are mineral type A and B on grid points. One can build conveyor belts to collect A to left and B to top. Find maximum mineral that can be collected.
- Maintain F[i][j] as maximum mineral in [0,i]x[0,j] area. Scan from top-left gives O(N^2) solution, and from bottom-right gives O(N^3).
- POJ 1925 Spiderman
- The problem is not good, for its worst time complexity is too high.
- POJ 3034 Whac-a-Mole
- Find maximum score in a Whac-a-Mole game. Hammers can move from/to integer points in straight lines only.
- F[m][n][t]: maximum score with hammer’s end position at (m, n) at time t.
- POJ 3254 Corn Fields
- Given a 0-1 matrix. One can select 1’s from it but without adjacent 1’s. Find number of valid selections.
- F[m][n]: number of selections with first m rows when m-th row is of state n.
- POJ 1185 炮兵阵地
- Similar to 3254, but need consider two rows/columns for whether adjacent. Need to calculate valid states first to shrink state space.
- POJ 2411 Mondriaan’s Dream
- Given mxn field, find number of filling methods with 1x2 bricks.
- 0-1 encoding for vertical bricks and 1-1 for horizontal bricks. Then similar to 3254.
- OpenJudge 4119 复杂的整数划分问题
- Given a number M, find number of plans to 1) divide it into K numbers 2) divide it into different numbers 3) divide it into odd numbers
- 1) is F[m][n] = F[m-1][n-1] (has 1) + F[m-n][n] (no 1). 2) and 3) are knapsack.
Greedy
- USACO Mixing Milk
- Fraction knapsack.
- USACO Barn Repair
- Given points 1 to n, one can cover a given point set using no more than L lines. Find the minimum number of points need to be covered.
- Greedily choose minimum seperations.
- USACO Job Processing
- Minimize the time of 2-phase jobs flowing through M1 phase-1 machines and M2 phase-2 machines, with different job processing times.
- See USACO solution.
- POJ 1328 Radar Installation
- Given intervals, find minimum points to color all intervals.
- POJ 2586 Y2K Accounting Bug
- POJ 3253 Fence Repair
- Given a single wood plank, cut it into given pieces. Each cut cost is the length of the plank being cut, find minimum cost.
- Huffman tree.
Graph
- Shortest Path
- Bellman-Ford
- Dijkstra
- Floyd
- SPFA
- USACO Bessie Come Home
- Floyd.
- USACO Cow Tours
- Given un-connected regions, find minimum diameter of graph formed by connecting any two of them.
- Floyd and enumerate connected point pairs.
- USACO Sweet Butter
- Heap-optimized Dijkstra.
- USACO Camelot
- SPFA (BFS without visited), for each knight calculate minimum cost to all grids with or w/o king. Note that “no king” can go to “with king”, but not vice versa.
- USACO Fence Loops
- Find shortest cycle in a weighted graph.
- For each edge break it and do dijkstra.
- POJ 1860 Currency Exchange
- Find exchange rate > 1 in the exchange grph, from given currency. Bellman-ford.
- POJ 3259 Wormholes
- Find negative circle in the whole graph. Floyd.
- POJ 1062 昂贵的聘礼
- Define “having nothing” state HN. For each gift G valued p, we have (HN, G) edge with cost p. For each replacement G’ with better price q, we have (G’, G) with cost q. Do shortest path with Dijkstra.
- POJ 2253 Frogger
- For each point, find minimum of max edge length of path to it. Dijkstra, change objective to minimize edge length. Greedy policy can be prooved.
- POJ 1125 Stockbroker Grapevine
- Bare floyd.
- POJ 2240 Arbitrage
- Similar to 1860, but consider all start currency. Floyd.
- Topological Sort
- POJ 1094 Sorting It All Out
- Bare topological sort.
- POJ 1094 Sorting It All Out
- Eularian Path
- Hierholzer’s algorithm
- USACO Riding the Fences
- POJ 2513 Colored Sticks
- Given sticks with colored two ends, find whether they can be aligned i.e. ends with same colors are connected.
- Note that there might be non-connected graph.
- Minimum Spanning Tree
- Prim
- Kruskal
- USACO Agri-Net
- Bare MST.
- POJ 1789 Truck History
- Find MST in string distance graph.
- POJ 2485 Highways
- Find the spanning tree with minimum maximum edge. MST satisfies the condition.
- POJ 1258 Agri-Net
- Same with USACO Agri-Net.
- POJ 3026 Borg Maze
- Bare MST. STL queue will timeout, use vanilla array.
- POJ 2031 Building a Space Station
- Bare MST, need to merge connected points.
- Network Flow
- Max-Flow
- Edmond-Karp
- USACO Drainage Ditches
- Bare Edmond-Karp.
- USACO Pollutant Control
- Find minimum edge cut with minimum edge number.
- To minimize the edge number, solve minimum cut among full-capacity edges. Full edges are refilled with weight 1, others with infinity. As a result, max-flow capacity == min-cut capacity == min edge number.
- USACO TeleCowmunication
- Minimum node cut.
- POJ 1459 Power Network
- Given power plants, consumers and dispatchers, find maximum power consumed.
- Bare max flow. Connect plants to source and consumers to sink.
- Maximum Matching
- Bi-Partite Graph
- Hungarian
- POJ 3041 Asteroids
- Given (x, y) points, one can eliminate a row or a col. Find minimum steps to eliminate all points.
- Build x-y bi-partite graph with super source and sink, find minimum cut (maximum match). Graph cut means no more points.
- There is a Konig theorem: |min-node-cov| = |max-match|.
- POJ 3020 Antenna Placement
- Given (x, y) points, one can cover points using length-2 capsules. Find minimum capsules needed.
-
|nodes = |max-match| + |min-edge-cov|. Positions as nodes, capsules as edges.
- Max-Flow
- Flood Filling
- Strong Connected Region
- Tarjan algorithm
- USACO Network of Schools
Math
- High Precision
- POJ 2109 Power of Cryptography
- Need constant optimization.
- POJ 2109 Power of Cryptography
- Mini-Max Search
- USACO A Game
- Two players fetch numbers from two ends of a sequence for maximum sum.
- USACO A Game
- USACO Factorials
- Find rightmost non-zero digit of n!.
- POJ 3087 Shuffle’m Up
- Given two equal-length sequences, one can shuffle them. E.g., ABAB and BABA -> BAABBAAB. Find whether it’s possible to get a sequence by shuffling multiple times.
- This is a out perfect shuffle problem. See solution file for further explanation.
- POJ 3252 Round Numbers
- Define “round number” is a number whose binary representation has more 1 than 0. Find how many round numbers are there in a given range [x, y].
- POJ 1850 Code
- Given encoding rule a=1, b=2, …, z=26, ab=27, …, az=51, bc=52, …, vwxyz=83681, find encoding for any word.
- POJ 1019 Number Sequence
- Given number sequence like 112123123412345…, find i-th digit.
- POJ 1942 Paths on a Grid
- Calculate C(m+n, m). Be careful with timeout when m == 1 or m == 2.
- POJ 2635 The Embarrassed Cryptographer
- Given big M (~100 digits), calculate its minimum prime factor. Need prime sieve.
- POJ 3292 Semi-prime H-numbers
- Given domain {4k+1}, find semi primes. A semi prime is a number produced by two-prime multiplication.
- POJ 1845 Sumdiv
- Given A and B, find sum of all natural divisors of A^B mod 9901.
- Factorize A^B as a1^n1*a2^n2 …, sum can be represented by generative function: (1+a1+…+a1^n1)(1+a2+…+a2^n2)…
- POJ 2115 C Looooops
- Find minimum solution for module linear equation.
Miscellaneous
- Construction
- USACO Sorting a Three-Valued Sequence
- Construct an optimized swapping solution to sort 1, 2, 3s.
- Count 1in2, 1in3, 2in1, 2in3, 3in1, 3in2. Then do pairwise elimination (1in2 and 2in1). Then rest is 231 or 132.
- POJ 3295 Tautology
- Build an recursive parser.
- USACO Sorting a Three-Valued Sequence
- Emulation
- USACO Your Ride is Here
- USACO Greedy Gift Givers
- USACO Friday the Thirteenth
- USACO Broken Necklace
- USACO Milking Cows
- USACO Transformations
- USACO Name That Number
- There are digit-letter mapping (2-ABC,3-DEF,…) and a dictionary with 4-length words. Given a 4-length number, find all corresponding words.
- Binary search.
- USACO Preface Numbering
- USACO The Tamworth Two
- Whether farmer J will meet the cow. Break after step mn, where mn is the area of the maze.
- USACO Fractions to Decimals
- USACO Spinning Wheels
- Stop iteration after 360 times, because every spin will return to initial state.
- USACO Magic Squares
- USACO Starry Night
- POJ 1068 Parencodings
- POJ 1573 Robot Motion
- POJ 2632 Crashing Robots
- POJ 2993 Emag eht htiw Em Pleh
- POJ 2996 Help Me with the Game
- Enumeration
- USACO Palindromic Squares
- USACO Dual Palindromes
- USACO Prime Cryptarithm
- USACO Combination Lock
- USACO Wormholes
- USACO Ski Course Design
- Given hills, one can change their heights with cost pow(deltaH, 2). Find minimum cost to change them into a 17 interval.
- O(Nlog(M)) time by binary search.
- USACO Arithmetic Progressions
- Find a + nb in p^2 + q^2.
- Search in p^2 and q^2 only.
- USACO Prime Palindromes
- Find all palindrome primes between two numbers (can be 0 to 10^9).
- USACO Superprime Rib
- Find all numbers whose prefixes are all prime.
- USACO Runaround Numbers
- USACO Healthy Holsteins
- USACO Party Lamps
- USACO Zero Sum
- 24-point game, with only + and -.
- USACO Humble Numbers
- Given N primes, find the Kth largest product produced by them. O(NK) time.
- USACO Contact
- Find substrings within 12-length with top-K appearance in 01 string. Bit manipulation.
- USACO Feed Ratios
- POJ 1753 Flip Game
- POJ 2965 The Pilots Brothers’ Refrigerator
- Need constant optimization.
- Divide & Conquer
- USACO Ordered Fractions
- Print all fractions represented by 1…N.
- Simple enumeration worked well.
- Faster solution: if n1/n2 <= d1/d2, then n1/n2 <= (n1+d1)/(d1+d2) <= d1/d2
- USACO American Heritage
- Given in-order and pre-order, print post-order
- USACO Ordered Fractions
Search
- USACO Mother’s Milk
- USACO The Castle
- USACO Hamming Code
- USACO Controlling Companies
- Given controlling relations among Co.LTD’s, find all controlling relations.
- DFS for every company, do further search when new company is under control.
- USACO Overfencing
- Given a maze with multiple exits, find the point with minimum worst exit path.
- USACO Letter Game
- USACO Shuttle Puzzle
- Formula solution exists. See USACO analysis.
- USACO Frame Up
- USACO Snail Trail
- POJ 2488 A Knight’s Journey
- Given a chess board and a knight, find whether there is a hamilton path.
- POJ 3083 Children of the Candy Corn
- Walk through a maze by walking alongside left/right wall and shortest path.
- Turn left/right when there is path to left/right. Else if no path turn right/left.
- POJ 3009 Curling 2.0
- Throw stones to the target in a grid. The stone can brick one wall at a time.
- Use DFS since the maze can change.
- POJ 1321 棋盘问题
- Generalized N-queen problem.
- POJ 2251 Dungeon Master
- Given a 3D maze, find shortest path from start to end. Simple BFS.
- POJ 3278 Catch That Cow
- Given N and K, one can do N+1, N-1 and N*2 to get K, find minimum steps.
- Simple BFS since 0 <= N (state number) <= 100000.
- POJ 1426 Find The Multiple
- Given n, find m i.e. m % n == 0 and m’s decimal representation contains only 0 and 1.
- Do bfs on remainder space of n.
- POJ 3126 Prime Path
- Given two 4-digit primes A and B, find least number of 1-digit replacements to convert A to B. Simple BFS.
- POJ 3414 Pots
- Given two pots with volume A and B, and three actions FILL, DROP and POUR, find least steps to make C unit water. Simple BFS.
- POJ 1416 Shredding Company
- Given two numbers A and B, find the way to cut B that sum of the segments is maximum and no more than A.
- POJ 2676 Sudoku
- Solve a 9x9 sudoku.
- POJ 1129 Channel Allocation
- Vertex coloring problem.
- POJ 3411 Paid Roads
- Given a road graph, roads have costs. Some roads can be pre-paid at some node. Find minimum cost from node 1 to node N.
- DFS, state is pre-paid roads and current city. Haven’t get accepted yet.
- POJ 2531 Network Saboteur
- Find maximum cut of a fully connected graph.
- O(2^(n-1)*n) time, state enumerate using gray code.
String
- POJ 1035 Spell Checker
- Given a word and a dictionary, find all one-edit-distance matches.
- POJ 3080 Blue Jeans
- Given a set of strings, find their longest common substring.
- Binary search LCS length.
- POJ 1936 All in All
- Implement isSubString.
- POJ 1961 Period
- Given a string s, for each its prefix judge whether is periodical.
- Use KMP next array WITHOUT optimization. Cycle length is n - next(n) for 1 <= n <= len(s).
- POJ 2406 Power Strings
- Given a string s, find whether it’s periodical.
- Similar with POJ 1961. Or find s in (s+s)[1:-1].
Sort
- POJ 2388 Who’s in the Middle
- Find median.
- POJ 2299 Ultra-Quicksort
- Find all reverse pairs.
- BIT/Segment tree/instrumented merge sort.
Hash
- POJ 3349 Snowflake Snow Snowflakes
- Given lengths of snowflake akes, find twin snowflakes.
- Find lexicographically mininimum representation.
- POJ 3274 Gold Balanced Lineup
- Find longest subarray that all bits appear same times.
- Prefix sum, generate relative hash, and for each hash find maximum gap.
- POJ 1840 Eqs
- Given ai (1 <= i <= 5), find number of solutions of SUM(ai * xi) = 0.
- Similar to LeetCode two sum.
- POJ 2002 Squares
- Given 2d points, find number of squares.
- O(n^2) enumeration.
- POJ 2503 Babelfish
- Translate words given a dictionary.
Binary search
- POJ 3273 Monthly Expense
- Given N numbers, find M segments with minimum maximum segment sum.
- Binary search for the maximum sum.
- POJ 3258 River Hopscotch
- Given 0, L and N points between 0 and L, find maximum of minimum distance by removing M points.
- Binary search the distance. To validate the answer, use greedy policy to remove stones.
- POJ 1905 Expanding Rods
- Find solution of sin(A/x) = B/x (A > B).
- Binary search, termination condition is defined by |a-b|/min(a, b) < 1e-12.
- POJ 3122 Pie
- Given M pies with different radius, calculate maximum sub-piece for N people.
Union find
- POJ 1703 Find them, Catch them
- There are two gangs in a city. Given enemy relationships and queries for relationship, answer yes/no/unkonwn.
- For each person maintain its enemy. Do merges in enemy relationships.
- POJ 2492 A Bug’s Life
- Similar to 1703, but need to find contradiction.
- Judge before each merge.