2016湖南省赛----G - Parenthesis (括号匹配)

Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions.

The i-th question is whether P remains balanced after p ai and p bi  swapped. Note that questions are individual so that they have no affect on others.

Parenthesis sequence S is balanced if and only if:

1. S is empty;

2. or there exists balanced parenthesis sequence A,B such that S=AB;

3. or there exists balanced parenthesis sequence S‘ such that S=(S‘).

Input

The input contains at most 30 sets. For each set:

The first line contains two integers n,q (2≤n≤10 5,1≤q≤10 5).

The second line contains n characters p 1 p 2…p n.

The i-th of the last q lines contains 2 integers a i,b i (1≤a i,b i≤n,a i≠b i).

Output

For each question, output " Yes" if P remains balanced, or " No" otherwise.

Sample Input

4 2
(())
1 3
2 3
2 1
()
1 2

Sample Output

No
Yes
No

題意: 给出一个已经匹配的括号序列,任意的交换两个位置的括号,判断是否匹配,如果匹配输出 Yes 不匹配输出 No。

输入一个n一个m,n表示括号序列的长度,m代表下面给出m种交换方式,对每一种方式进行判断。

思路:

  可将该问题分为三类:

            1. 若交换的两个位置的括号相同 则可直接输出 Yes;

            2.若后面的左括号与前面的右括号交换,则可直接输出Yes. 因为一开始是平衡串,  如果左边的字符‘)‘与右边的‘(‘交换,那么此时交换的两个必能匹配为一对。

            3.若后面的右括号与前面的左括号交换,则可根据括号匹配问题进行判断.

代码实现:

#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <stdio.h>
#include <stack>
using namespace std;

char s1[300000]={0};

int main(){
    int n,m;
    while(~scanf("%d%d",&n,&m)){
            getchar();
            scanf("%s",s1);
            int a,b;
            for(int i=1;i<=m;i++){
                char c;
                scanf("%d%d",&a,&b);
                if(a>b)
                    swap(a,b);
                if(s1[a-1]==s1[b-1]||s1[b-1]==‘(‘){                   //第一种情况与第二种情况
                  printf("Yes\n");
                  continue;
                }
                swap(s1[a-1],s1[b-1]);
                int sum = 0;
                for(int i = 0;i<n;i++){                                          //  第三种情况的判断
                    if(s1[i]==‘(‘)
                        sum++;
                    if(s1[i]==‘)‘)
                        sum--;
                    if(sum<0)
                        break;
                }
                if(sum==0)
                    printf("Yes\n");
                else
                    printf("No\n");
                swap(s1[a-1],s1[b-1]);                                    //将字符串还原
            }
    }
    return 0;
}
时间: 2024-12-25 03:12:46

2016湖南省赛----G - Parenthesis (括号匹配)的相关文章

2016湖南省赛----A 2016 (同余定理)

2016湖南省赛----A 2016 (同余定理) Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤10 9). Output 对于每组数据,输出一个整数表示满足条件的数量. Sample Input 32 63 2016 2016 1000000000 1000000000 Sample

(三角剖分)三角形和矩形的面积交 2016湖南省赛

1 // (三角剖分)三角形和矩形的面积交 2016湖南省赛 2 3 #include <iostream> 4 #include <cstdio> 5 #include <cstring> 6 #include <stack> 7 #include <queue> 8 #include <cmath> 9 #include <algorithm> 10 using namespace std; 11 12 const i

2016湖南省赛 I Tree Intersection(线段树合并,树链剖分)

2016湖南省赛 I Tree Intersection(线段树合并,树链剖分) 传送门:https://ac.nowcoder.com/acm/contest/1112/I 题意: 给你一个n个结点的树,树上每个节点有自己的颜色 问你删除第i条边后形成的两颗子树有多少个相同的颜色 题解: 树链剖分写法: 对于每一种颜色来说,如果这个颜色是在单独的一颗子树中,那么就不会对其他的边产生贡献,所以我们单独对每一种颜色对边的贡献讨论,如果这个颜色只有一个,那么就不会产生贡献,否则,他就可以在两个相同颜

2016湖南省赛 [Cloned]

A.2016 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤10 9). Output对于每组数据,输出一个整数表示满足条件的数量.Sample Input 32 63 2016 2016 1000000000 1000000000 Sample Output 1 30576 7523146895502644 代

哈尔滨理工大学2016新生赛G题

FBI Tree的描述如下: 我们可以把由0和1组成的字符串分为3类,全0的串成为B串,全1的串成为I串,既含0又含1的串则称为F串.FBI树是一种二叉树,它的节点类型也包括F串节点.B串节点和I串节点三种.由一个 长度为2^N的01串S可以构造出一颗FBI树T,递归的构造方法如下: (1)   T的根节点为R,其类型与串S的类型相同. (2)   若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2:由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2. 现在给出一个长

2016年省赛G题, Parenthesis

Problem G: Parenthesis Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 398  Solved: 75[Submit][Status][Web Board] Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-th question is whether P remains balan

湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis

1809: Parenthesis Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-th question is whether P remains balanced after pai and pbi  swapped. Note that questions are individual so that they have no affect

8586 括号匹配检验

今天把数据结构学习的代码拿出来和网友分享一下,应该测试能过! Time Limit:1000MS  Memory Limit:1000K Total Submit:679 Accepted:182 Type: Program   Language: Not Limited Description 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.

栈的应用之括号匹配的检验

栈的实际应用很多,其中括号匹配是很常见的例子.下面列出基本算法和源代码,标明注释以便日后复习和翻阅. Description: 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的 顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上 述括号的表达式,检验括号是否配对.本题给出部分check()函数,要求将check()函数补充完整,并完成 整个程序. 算法: 代码: 1 void c