結果
| 問題 |
No.790 ちきんの括弧並べ
|
| ユーザー |
|
| 提出日時 | 2019-03-02 02:48:31 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,403 ms / 2,000 ms |
| コード長 | 1,826 bytes |
| コンパイル時間 | 1,585 ms |
| コンパイル使用メモリ | 167,176 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-23 12:16:22 |
| 合計ジャッジ時間 | 3,934 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 10 |
ソースコード
/*
ちきんは'('の文字を𝑁個、')'の文字も𝑁個持っています('は文字に含まれません)。ちきんはこの2種類の文字を全て使用した対応の取れた括弧列が全部で何通り作れるか知りたくなりました。ただし、対応の取れた括弧列とは問題文末尾の定義を満たしている必要があります。ちきんの代わりに全部で何通りの対応の取れた括弧列が作れるかを出力してあげてください。
定義:
・空文字列は正しい括弧列の条件を満たす。
・文字列𝑠が正しい括弧列の条件を満たすなら、(𝑠)は正しい括弧列である。
・文字列𝑠と𝑡がどちらも正しい括弧列の条件を満たすなら、𝑠と𝑡を連結した文字列は正しい括弧列である。
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N;
int ans=0;
cin>>N;
N*=2;
for(int bit=0;bit<(1<<N);bit++){
/* (=0 , )=1*/
int le=0,ri=0;
bool bye=false;
// cout<<bitset<4>(bit)<<endl;
for (int i = 0; i < N; ++i)
{
if(bit&(1<<i)){
ri++;
}else{
le++;
}
if(le>ri){
bye=true;
break;
}
}
if(ri==le && bye==false){
ans++;
// cout<<"******"<<bitset<4>(bit)<<endl;
}
}
cout<<ans<<endl;
}
/*結果->4
∵ aの値を2進数にしたものをbビット左シフトするから
*/
/*
N=1のとき、つまり () だけが成り立つとき
0001と考えると、1*2ビット左シフトするから
0100となり、bit < 0100となるから
0000〜0011までの探索になる(bit長を考えると00〜11)
(=0,)=1であるから
00=))
01=)(
10=()
11=((
となるので1つだけ成り立っているのがわかる
*/