文字化け話題場合は、元のタイトルにアクセスするためのアドレスをクリックしてください。
タイトル説明
典型的には、人々は、すべてのに慣れている N- 例えば、すべての2ビットのバイナリ文字列が昇順に辞書は、辞書式順序としてnビットのバイナリストリングである:00,01,10,11。
グレイコード(グレイコード)は特別な N- 最後に隣接すると見なされるべき異なる、特に、最初の文字列と文字列に正確に隣接する2つの2進列間で必要とnビットのバイナリ文字列置換法、 。
全ての2ビットのバイナリ列は、グレーコード例に配置されている:00,01,11,10。
N- nビットのグレイコードは、1つのアルゴリズムは、グレイコードを生成することについて説明されている以上です。
- バイナリ文字列のグレイコードがために、2つから構成される:0,1。
- N - +。1 N- + 1ビットのグレイコードの前に 2 ^ N- 2 バイナリN-ストリングまたはによって生成アルゴリズムよう N- nビットのグレイコード(合計 2 ^ N- 2 、N- N- 、次いでnビットのバイナリ列)が順に配置され、そして0と接頭辞で構成される各文字列の前に。
- N - +。1 N- + グレイコード後 2 ^ N- 2 アルゴリズムが生成するので、Nのバイナリ文字列、それは形成されていてもよい N- nビットのグレイコード(合計 2 ^ N- 2 、N- N- nビットのバイナリ列)を逆の順序で、そして次いでプレフィックス1を構成する各文字列の前に。
要約すると、N-1 + N- + 1ビットのグレイコード、 N- グレイコードNはビット 2 ^ N- 2 オーダープレフィックスプラス0 Nバイナリストリング、および逆順プラスの合計からなるプレフィックスに配置されている 2 ^ { } +。1 N- 2 N - + 。1バイナリストリング。さらに、 N- におけるnビットのグレイコード 2 ^ N- 2 、N-バイナリ文字列、上述したアルゴリズムの順序は、私たちからそれらを得る 0 \ 2 ^ N-SIM - 。1 0 〜2 のn - 1つのID。
このアルゴリズムによれば、2つのグレイコードは、これを起動することができます。
- グレイコードは、0として知られています。
- 00、01への最初の2つのグレーコード。2後グレイコードは11,10です。0から3まで順次番号00,01,11,10を与えるために組み合わせました。
同様に、3つのグレイコードは、これを起動することができます。
- 00,01,11,10:グレイコードは、2として知られています。
- 最初の4つのグレイコードがある:000001011010。4グレイ・コードの後である:110111101100。与えるために組み合わせる:000,001,011,010,110,111,101,100を、順次0から7までの番号。
今、与えられた N- N-、K K、あなたが生成するため、上述したアルゴリズムを取得 N- におけるnビットのグレイコード K バイナリ列のK番号。
入力形式
一行のみ二つの整数 のn のn、kの参照のタイトルの説明を意味K、。
出力フォーマット
唯一の行 N- nビットのバイナリ文字列が回答を表します。
サンプル入力と出力
2 3
10
3 5
111
44 1145141919810
00011000111111010000001001001000000001100011
説明/ヒント
サンプル1 [解説]
グレイコード2:00,01,11,10、0〜3の番号は、列3は、したがって、10です。
サンプル2 [解説]
3グレイコード:000,001,011,010,110,111,101,100、0から7までの番号が、文字列に5 111です。
[データ範囲]
以下のための 50 \%。5 0 %のデータ:N- \のLeq 10 N- ≤ 1 0
以下のための 80 \%8。0 %データ:。K \のLeq 5 \ ^ 6〜10倍。K ≤ 5 × 1 0 6。
ために 95 \%。9 。5 データの%:K \のLeq 63は{2} ^である- 1つの。K ≤ 2 6。3 - 1。
以下のための 100 \%。1 0 0 %のデータ:1 \ n型のLeq \のLeq 64 1。≤ N- ≤ 6。4。 0 \のLeq K \ ^ LT N-2 0 ≤ K < 2 N-
#include <アルゴリズム> の#include <iostreamの> する#include <CStringの> する#include <cstdioを> する#include <cmath> 名前空間STDを使用して、 符号なしの長い長いMAXX = 1。 = 1 INT N、。 OK BOOL; 符号なしlong longのK; [10000] BOOL。 INTメイン(){ CIN >> N >> K。 以下のために(INT iが= 1; I <N; I ++){ MAXX * = 2; } OK = 1。 一方、(MAXX> 0){ IF(OK == 1){ // COUT << MAXX <<」「<< K << ENDL。 IF(MAXX> K){ [ここ++] = 0; } 他{ K- = MAXX。 [ここで、++] = 1。 OK = 0; } MAXX / = 2。 } IF(OK == 0){ // COUT << MAXX <<」「<< K << ENDL。 IF(MAXX> K){ [ここ++] = 1。 OK = 1; } 他{ K- = MAXX。 [ここで、++] = 0; } MAXX / = 2。 持続する; } } {(; I <= N I ++ iは1 = INT)のため のprintf( "%dの"、[I])。 } 0を返します。 }