hdu5831

题意:问交换两个位置能否使这些括号匹配;

复制航神代码,类似于递归思想

#define N (1<<17)
#include <bits/stdc++.h>

using namespace std;

int T,n;
char s[N];

int main()
{
    for(cin>>T;T--;)
    {
        int cur=0,mx=N,res=0;
        scanf("%d%s",&n,s);
        for(int i=0;i<n;i++)
            cur+=s[i]=='('?1:-1,mx=min(mx,cur);
        if(n==2) res=cur==0&&mx<0;
        else res=cur==0&&mx>=-2;
        puts(res?"Yes":"No");

    }
    return 0;
}

 

posted @ 2016-08-11 19:39  十目  阅读(139)  评论(0编辑  收藏  举报