一道比较显然的构造题
呸
显然1和0的数量都需要是偶数,不然必挂
显然开头和结尾必须相互匹配,不然也挂
然后用1把这里分成一小块一小块,每一块,如果有偶数个零,显然可行
奇数个零的块必然成双存在,同上处理
01分开构造
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int t;
int n;
string s,s1,s2,s3;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
cin>>s;
int l=n;
s1=s3;
s2=s3;
int c1=0,c2=0;
for(int i=1;i<l-1;++i){
if(s[i]=='0'){
c1++;
if(c1%2==1){
s1+='(';
s2+=')';
}else{
s1+=')';
s2+='(';
}
}else{
c2++;
if(c2%2==1){
s1+='(';
s2+='(';
}else{
s1+=')';
s2+=')';
}
}
}
if(s[0]=='0'||s[l-1]=='0'||(c1&1)||(c2&1)){
printf("NO
");
}else{
printf("YES
");
cout<<"("<<s1<<")"<<"
"<<"("<<s2<<")"<<endl;
}
}
return 0;
}