HDU 5831 Rikka with Parenthesis II(六花与括号II)

HDU 5831 Rikka with Parenthesis II 六花与括号II

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:

Correct parentheses sequences can be defined recursively as follows:
1.The empty string "" is a correct sequence.
2.If "X" and "Y" are correct sequences, then "XY" (the concatenation of X and Y) is a correct sequence.
3.If "X" is a correct sequence, then "(X)" is a correct sequence.
Each correct parentheses sequence can be derived using the above rules.
Examples of correct parentheses sequences include "", "()", "()()()", "(()())", and "(((())))".

Now Yuta has a parentheses sequence S, and he wants Rikka to choose two different position i,j and swap Si,Sj.

Rikka likes correct parentheses sequence. So she wants to know if she can change S to a correct parentheses sequence after this operation.

It is too difficult for Rikka. Can you help her?


六花是个数学渣,你懂的。勇太表示前途堪忧,因此他决定来个数学特训。

下面是部分简介:

正确的括号序列定义如下:

1.空字符串 "" 为正确序列。

2.如果 "X" 与 "Y" 都是正确序列, 那么 "XY" (将 X, Y相互连接) 也是一个正确的是序列。
3.如果 "X" 是一个正确的序列, 那么 "(X)" 也是一个正确的序列。
每个正确序列都适用上诉规则。
正确括号序列例子如下 "", "()", "()()()", "(()())", 和 "(((())))".

现在勇太有个括号序列 S, 让六花选两个不同的位置 i, j 然后交换 Si, Sj。

六花喜欢正确的括号序列。因此她想知道是否能通过这种做法把S变成一个正确的括号序列。

六花表示痛苦无力,急需援助。


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

For each testcase, the first line contains an integers n(1<=n<=100000), the length of S. And the second line contains a string of length S which only contains ‘(’ and ‘)’.


第一行有一个数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
4
())(
4
()()
6
)))(((


Yes
Yes
No


Hint


提示


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 }
时间: 2024-10-13 12:37:01

HDU 5831 Rikka with Parenthesis II(六花与括号II)的相关文章

HDU 5831 Rikka with Parenthesis II ——(括号匹配问题)

用一个temp变量,每次出现左括号,+1,右括号,-1:用ans来记录出现的最小的值,很显然最终temp不等于0或者ans比-2小都是不可以的.-2是可以的,因为:“))((”可以把最左边的和最右边的交换即可,其他-2的情形同理.另外要注意的坑点是Hint里面所说的:“But do nothing is not allowed.”.因此,“()”是不可以的,这个要特判. 代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #inc

hdu 5425 Rikka with Tree II(暴力)

题目链接:hdu 5425 Rikka with Tree II 直接枚举就好了,当概率极小时贡献值可以忽略. #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <algorithm> using namespace std; const int maxn = 1e5 + 5; int N,

hdu-5831 Rikka with Parenthesis II(贪心)

题目链接: Rikka with Parenthesis II Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to pr

HDU 5423:Rikka with Tree Dijkstra算法

Rikka with Tree Accepts: 207 Submissions: 815 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的: 对于一棵树TT,令F(T,i)F(T,i)为点1到点ii的最短距离(边长是1). 两棵树AA和BB是相似的当且仅当他们顶点数相同且对于任意的ii都有

hdu 5204 Rikka with sequence 智商不够系列

Rikka with sequence Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5204 Description 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:现在有一个序列,因为这个序列很任性,开始时空的.接下来发生了n个事件,每一个事件是以下两种之一:1.勇太利用黑炎龙的力量在序列的开头.结尾以及每相邻两个元素之间都插入

hdu 5204 Rikka with sequence

题意: 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的: 如果一个无重边无自环的无向图的每个联通块都存在一条回路经过这个联通分量所有边一次且仅一次,那么就称这个无向图是优美的.请问有n个点且边数不少于m的优美的图有多少个?(在这题中,我们认为这n个点是本质不同的) 当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗? 限制: 1 <= n <= 1e5; 1 <= L <= R <= 1e18; 1 <= w <=

hdu 5203 Rikka with wood sticks

题意: 勇太有一根长度为n的木棍,这个木棍是由n个长度为1的小木棍拼接而成,当然由于时间放置的久了,一些小木棍已经不牢固了,所以勇太想让六花把这个木棍分成正整数长度的4段,其中有3段要没有不牢固的小木棍,勇太希望这3段木棍的长度和可以最大.同时六花希望在满足勇太要求的情况下让这三根木棍能拼成一个三角形,请问萌萌哒六花有多少种可行的分割方案呢? 限制: 1 <= n <= 1e6; 1 <= m <= 1e3 思路: 实际上问题会化为: 1. 给出长度为l1,l2的木棒,把其中一根截

HDU 5423 Rikka with Tree(水题)

Rikka with Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 292    Accepted Submission(s): 149 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation,

HDU 5422:Rikka with Graph

Rikka with Graph Accepts: 353 Submissions: 1174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的: 勇太有一张nn个点mm条边的无向图,每一条边的长度都是1.现在他想再在这张图上连上一条连接两个不同顶点边,使得1号点到nn号点的最短路尽可能的短