hdu 5831 2016多校8

来源:互联网 发布:生化危机6优化怎么样 编辑:程序博客网 时间:2024/05/29 07:12

#include <iostream>#include <stdio.h>#include <vector>#include <algorithm>#include <string.h>using namespace std;#define N 100100char str[N];int main(){    int T;    scanf(" %d",&T);    while(T--){        int n;        scanf(" %d",&n);        //while(getchar()!='\n') continue;        int l = 0;        int c = 0;        scanf(" %s",str);        if(n==2&&strcmp(str,"()")==0){            puts("No");            continue;        }        for(int i=0;i<n;i++){            //char ch = getchar();            char ch = str[i];            if(ch==')'){                l--;            }else{                l++;            }            if(l==-1){                l=0;                c++;            }        }        //printf("%d %d\n",l,c);        if(c>1||(l-c)!=0){            puts("No");        }else{            puts("Yes");        }        //fflush(stdout);    }    return 0;}

题意:给一个长度为100000的括号组成的串,是否可以通过交换两个字符使得他匹配。

题解:简单题,但是有坑。之所以记下来是因为自己被坑了。


using namespace std;#define N 100100char str[N];bool check(int n){    int l = 0;    for(int i=0;i<n;i++){        if(str[i]=='('){            l++;        }else{            l--;        }        if(l<0) return false;    }    return l==0;}int main(){    int T;    scanf(" %d",&T);    while(T--){        int n;        scanf(" %d",&n);        scanf(" %s",str);        if(n==2&&strcmp(str,"()")==0){            puts("No");            continue;        }        if(check(n)){            puts("Yes");            continue;        }              for(int i=0;i<n;i++){            if(str[i]==')'){                for(int j=n-1;j>=0;j--){                    if(str[j]=='('){                        swap(str[i],str[j]);                        break;                    }                }                break;            }        }        if(check(n)){            puts("Yes");        }else{            puts("No");        }        //fflush(stdout);    }    return 0;}



有坑的代码:




0 0
原创粉丝点击