CF1214C

题意:

给你一个括号序列,问你时候能仅移动相邻的两个元素,使括号序列合法。

解法:

可以先考虑普通括号序列怎么做
这道题只交换相邻的两个元素,所以如果中间左括号和右括号的差值大于2时,括号就不合法。

CODE:

#include<bits/stdc++.h>
 
using namespace std; 
 
#define LL long long
#define N 200010
 
char s[N]; 
int n,l,r,cnt; 
 
int main() {
    scanf("%d",&n);
    for (int i = 0 ; i < n ; i++) {
        cin>>s; 
        if(s[i] == '(') l++; 
        else r++; 
    }
    for(int i = 0 ; i < n ; i++) {
        if(s[i] == '(') cnt++; 
        else cnt--; 
        if(cnt < -1) {
            puts("No");
           // system("pause"); 
            return 0; 
        }
    }
    if(l != r) puts("No"); 
    else puts("Yes");
    //system("pause"); 
    return 0; 
}