100 likes | 629 Views
USACO. (())()(()) ((())()(())()(())) (())()(()). USACO November Contest. The first USACO competition was last week. Lynbrook had a very strong performance as a whole Congratulations to Andy Wang (1000), Raphael Chang (933), and Edward Lee (867) for promoting to Silver
E N D
USACO (())()(()) ((())()(())()(())) (())()(())
USACO November Contest • The first USACO competition was last week. • Lynbrook had a very strong performance as a whole • Congratulations to Andy Wang (1000), Raphael Chang (933), and Edward Lee (867) for promoting to Silver • Kudos to Johnny Ho (875) for scoring highest out of the US seniors on Gold • Congratz to Steven Hao (938) for proving that he can O(n^2) bash problems • Good job to the random 5th grader who got a perfect on Silver • Full results and problems are at usaco.org
Bronze Contest: "Typo" • Input: an arbitrary string of parentheses of length n, n < 100,000 • Output: the number of ways you can flip exactly one of the parentheses to make the string balanced (not necessarily positive) • Example: (((()) • answer = 3 • change either the 2nd, 3rd, or 4th parens • Solution: • Prefix sums • The stuff we covered on the Halloween PotW
Bronze Contest: "Typo" • Figure out which type of parentheses is in excess (kind of like a limiting reaction) • (((()): 4 ('s, 2 )'s • You should convert one of the ('s • Orient it so that there are too many )'s instead of ('s • Reversing/flipping the string does not change answer • (((()) turns into (()))) • Now you should convert one of the )'s • Convert parentheses into numbers • (()))) turns into {+1, +1, -1, -1, -1, -1} • Take prefix sums • {1, 2, 1, 0, -1, -2} • A ) can be converted if and only if it lands at or before the first negative prefix sum
Silver/Gold Contest: "Balanced Cow Breeds" • Input: an arbitrary string of parentheses of length n, n < 1000 • Output: the number of ways you can color each parenthesis such that each color forms its own balanced string of parentheses • Example: (()) • (()) • (()) • (()) • (()) • Solution: • Dynamic programming • The stuff we were just about to cover :(
Silver/Gold Contest: "Balanced Cow Breeds" • Use recursion. • int recurse(int index, int nestA, int nestB) • If nextA or nestB become negative, quit immediately • If index reaches the end of the string, return 1 if and only if nestA == 0 and nestB == 0 • Otherwise, you can color index in 2 ways. • You can change this to a 2D DP state • nestB can be calculated from index and nestA • This makes your algorithm use O(N^2) memory • The algorithm visits O(N^2) states, each in constant time, for overall O(N^2)
"Concurrently Balanced Strings" • K strings of parentheses, each of length N. • Count the number of ranges (a, b) satisfying: • For any of the K strings, the substring from a to b is a balanced string of parentheses. • K <= 10, N <= 50 000 • Example • K = 3, N = 14, • Answer: 3 • N is large, need faster than quadratic. • N is only 50 000 • A good N^2 may pass 60 - 90% of the test cases • Similar for Gold Problem 3. s_1 = )()((())))(()) s_2 = ()(()()()((()) s_3 = )))(()()))(())
"Concurrently Balanced Strings" • Consider a single string. (Let K = 1) • Compute for each prefix of the string its "sum" • Sum of a string is # left parens - # right parens. • sums[i] is the score of the prefix ending at index i. • We can check if a substring from A to B is balanced. • Sum of this substring is sums[B] - sums[A] • This must be 0, so sums[A] == sums[B] • For all A < C < B, sums[C] >= sums[A] • Iterate over B • Count the number of possible A. • Also keep track of the negative condition. • Use a map for O(n log n) • Store K sums instead of 1 for original problem • Steven's Code (Expertly uses map<int, int>) • http://pastebin.com/rLSJwN9Y
In summary • Getting partial credit by O(n^2) bashing O(nlogn) problems is a highly effective strategy • Silver/bronze problems are all fairly standard • Dynamic programming • Graph theory (Dijkstra’s, BFS, DFS) • Greedy • Sorting • Silver/bronze contestants have to be very careful to pass • Test on both small and large test cases • Now just pray that we don’t have any more problems about parentheses
PotW • Last week's PotW is extended • The one about Karen's sleeping habits • The problem remains largely unsolved • Hints for Subtask 3, where N <= 100000 • Try all possible rooms as centers • Try the rooms in a specific order • depth-first search • Avoid recomputing the sum of distances to other rooms • Imagine moving the center from one room to an adjacent room • What needs to be precomputed?