Codeforces 508 E. Arthur and Brackets, codeforcesbrackets
Codeforces 508 E. Arthur and Brackets
Question link:
Http://codeforces.ru/problemset/problem/508/E
Question:
There are n pairs of parentheses. in order, the length range of each pair of parentheses is given and a condition is output.
Restrictions:
1 <= n <= 600
Ideas:
Greedy: matches first.
To solve the issue of matching parentheses, consider whether the stack can be used.
C ++ Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
/* Codeforces 508 E. Arthur and Brackets Question: There are n pairs of parentheses. in order, the length range of each pair of parentheses is given and a condition is output. Restrictions: 1 <= n <= 600 Ideas: Greedy: matches first. To solve the issue of matching parentheses, consider whether the stack can be used. */ # Include <iostream> # Include <cstdio> Using namespace std; Const int n= 605; Int stk [N], top; Char ans [2 * N]; Int len = 0; Int pos [N], l [N], r [N]; Int main () { Int n; Int flag = 1; Scanf ("% d", & n ); For (int I = 0; I <n; ++ I) { Scanf ("% d", & l [I], & r [I]); If (flag = 0) continue; Stk [++ top] = I; Pos [I] = len; Ans [len ++] = '('; While (top> 0 & pos [stk [top] + l [stk [top] <= len) { If (pos [stk [top] + r [stk [top] <len) { Flag = 0; Break; } Else { Ans [len ++] = ')'; -- Top; } } } If (flag & top = 0) { Puts (ans ); } Else { Puts ("IMPOSSIBLE "); } Return 0; }
|