郑轻16届校赛第一题
题目描述
样例输出5
二进制枚举法
arr[j] = 1
代表左括号
利用一个整数模板栈来检测合法性
#include<iostream>
#include<map>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
//#define int long long
#define IOS ios_base::sync_with_stdio(false);cin.tie(0);
typedef pair<int,int> PII;
const int N = 1e2+28;
typedef pair<int,int> Pair;
int arr[40];
int n;
bool check(){
int cur = 0;
for(int i = 0; i< n; i++){
if(arr[i]){
cur++;
}
else{
cur--;
if(cur < 0)
return false;
}
}
if(cur)
return false;
return true;
}
signed main()
{
cin >> n;
n*=2;
int ans = 0;
for(int i = 0; i < 1<<n; i++){
for(int j = 0; j < n; j++){
arr[j] = (i >> j & 1);
}
if(check()){
for(int k = 0; k < n; k++){
cout <<arr[k];
}
cout << '\n';
ans++;
}
}
cout <<ans <<'\n';
}