Module: 正しいブラケット シーケンス (RSP)


Problem

4 /6


PSP世代

Theory Click to read/hide

正しいブラケット シーケンスの生成は、チェックが行われた方法から直接行われます。正確性に違反することなく、新しいブラケットを追加するだけで済みます。これは、再帰的反復によって行われます。もしあなたが彼を知らないなら - BE... ああ、いや、もっと読むことで理解しようとすることができます.ブラケットの 1 つのタイプのコード サンプルを次に示します。
 

#include <vector>
#include <iostream>

使用 名前空間 std;
int n; // 半分の長さ 
ベクトル<文字>答え; // 私たちの答え 

void rec(int balance) {
if (ans.size() == 2 * n) { // もしそうなら、完了 < /span>
for (int i = 0; i < 2 * n; i++)
cout << ans[i] <<< " ";
cout << "\n";
}
if (ans.size() + バランス + 2 <= n * 2) { // チェック、私たち新しい左中かっこを閉じます
// ここで注意してください: シーケンスごとに個別のベクトルを作成する必要はありません 
ans.push_back('(');
rec(残高 + 1);
ans.pop_back(); // これを理解するには、再帰を意識する必要があります。まず、ベクトルに括弧を追加してから、このすべてのコードを再度実行します。 
// つまり、可能であればもう一度括弧を追加します。 
// これは、再帰を終了し始めるまで、つまり、目的の長さに達するまで発生します。 
// ブラケットの削除が開始されます。あなたがこれを理解するなら - おめでとうございます、あなたは素晴らしいです。 
}
if (balance > 0) { // ブラケットを閉じることができる場合は、それを閉じます。 
ans.push_back(')');
rec(バランス - 1);
ans.pop_back();
}
}

 int main()
{
シン>> n;
録音 (0);

    リターン 0;
}

そして今、困難な時期です - あなた自身でいくつかのタイプの括弧のアルゴリズムを書かなければなりません!ムアハハハハハハハハ!

Problem

British Scientists, Inc. の最も革新的な開発は、チルダ オメガ ラムダ計算を使用して解決できる問題 (つまり、問題なし) の解決策を見つける方法です。これを行うために、長さ x の可能なブラケット シーケンスをすべて調べます。ここで x は、会社の開発の多くで使用される秘密の定数の最初の数字です。 x が奇数の場合、1 を足すだけです。次に、神経言語プログラミングとフィボナッチ計算によるグーゴールド カタロニア数を使用した高度なアルゴリズムを使用して、用語を見つけます。しかし、これらのアルゴリズムはすでに実装され、特許を取得しています. 

あなたの仕事は反復アルゴリズムを実装することです. 


入力
入力は、秘密の定数の 1 桁目 - x (\(1 <= x <= 9\)) です。  ;
 

出力
長さ x (または \(x \% 2 ==1\) の場合は x+1 のすべてのスパンを出力する必要があります) 辞書順で。

 

<頭> <本体>
# 入力 出力
1 1
( )
[ ]
{}