标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Description |
题目描述 |
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them: |
六花是个数学渣,你懂的。勇太表示前途堪忧,因此他决定来个数学特训。 下面是部分简介:
正确的括号序列定义如下: 1.空字符串 "" 为正确序列。 2.如果 "X" 与 "Y" 都是正确序列, 那么 "XY" (将 X, Y相互连接) 也是一个正确的是序列。
|
Input |
输入 |
The first line contains a number t(1<=t<=1000), the number of the testcases. And there are no more then 10 testcases with n>100
|
第一行有一个数t(1<=t<=1000),表示测试用例的数量。并且不超过10个测试用例是n>100。
对于每个测试用例,第一行有一个整数n(1<=n<=100000),表示S的长度。第二行有一个只包含’(‘与‘)’长度为S的字符串。 |
Output |
输出 |
For each testcase, print "Yes" or "No" in a line. |
对于每个测试用例,输出一行"Yes"或"No"。 |
Sample Input - 输入样例 |
Sample Output - 输出样例 |
3 |
Yes |
For the second sample input, Rikka can choose (1,3) or (2,4) to swap. But do nothing is not allowed. |
对于第二个样例输出,六花可以选择 (1,3) 或 (2,4) 进行交换。但什么也不做并不好。 |
【题解】
大意就是交换一次后能否得到合法的括号序列,但是必须交换。
尽可能合并配对的括号,最后剩下...)))(((...的形式,只有空、)(、以及))((为交换后合法。
需要注意输入是()时必得)(,加个if即可。
【代码 C++】
1 #include <cstdio> 2 int main(){ 3 int t, n, l, e, nTemp; 4 char c; 5 scanf("%d", &t); 6 while (t--){ 7 scanf("%d ", &n); nTemp = n; 8 l = e = 0; 9 while (n--){ 10 c = getchar(); 11 if (c == ‘(‘) ++l; 12 else{ 13 if (l) --l; 14 else ++e; 15 } 16 } 17 if (nTemp == 2 && e == 0) puts("No"); 18 else{ 19 if (l == e && e <= 2) puts("Yes"); 20 else puts("No"); 21 } 22 } 23 return 0; 24 }
HDU 5831 Rikka with Parenthesis II(六花与括号II)
标签:
原文地址:http://www.cnblogs.com/Simon-X/p/5763398.html