왜곡 주제 경우, 원래의 제목에 액세스하기 위해 주소를 클릭하십시오.
제목 설명
일반적으로 사람들은 모두에게 익숙한 N- n 비트의 사전 식 순서와 바이너리 문자열을, 예를 들어, 모든 2 비트 바이너리 문자열을 사 전적으로 오름차순으로되어 있습니다 : 00,01,10,11.
그레이 코드 (그레이 코드)는 특별한 N- 정확히 다른 인접 특히 두 이진 스트링 사이 필요 n- 비트 이진 스트링 순열있어서, 제 문자열 및 문자열은 인접한 마지막으로 간주 .
모든 2 비트 이진 스트링은 그레이 코드의 예에서 배치되는 것은 : 00,01,11,10.
N- 그레이 코드의 알고리즘은 그레이 코드를 생성하는 단계에 대해서 설명한다 더보다 n 비트 :
- 이진 문자열의 그레이 코드는 순서대로, 두 개의 구성 : 0,1.
- N- +. 1 개 N- + . 전에 그레이 코드를 1 비트 2 ^ N- (2) 에 의해 생성 알고리즘 N 이진 스트링 정도 N- N- 비트 그레이 코드 (총 2 ^ N- 2 N-A N- 이진 문자열 N은 비트)의 순서로 배치 된 후, 0 접두사로 구성된 각 문자열 전에.
- N- +. 1 N- + 그레이 코드 후 2 ^ N- 2 N 바이너리 스트링, 그것은 알고리즘이 발생하도록 형성 될 수있다 N- (총 n 비트의 그레이 코드를 2 ^ N- 2 N-A 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를.
알고리즘에 따르면,이 그레이 코드는 다음을 실행할 수 있습니다 :
- 그레이 코드는 0으로 알려져있다.
- 00 처음 두 그레이 코드 01. 이 후, 그레이 코드는 11,10입니다. 0 ~ 3까지 순차적으로 번호 00,01,11,10을 합치고 하였다.
마찬가지로, 세 그레이 코드는 다음을 실행할 수 있습니다 :
- 그레이 코드는 2로 알려져있다 : 00,01,11,10.
- 처음 네 그레이 코드는 다음과 같습니다 000,001,011,010. 사 후 그레이 코드는 다음과 같습니다 110,111,101,100. 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- \ 10 당량 의 N- ≤ . 1 0
들면 80 % \ . 8 0 % 데이터 : .. K \ 5 당량 \ ^ 6 회 10 K ≤ . 5 × . 1 0 . 6
들면 95 % \ . 9 . 5 데이터 % . 1 - K \ 당량 63 ^ {2}이며 K ≤ 2 . 6 . 3 - 1.
들면 100 % \ 1 개. 0 0 % 데이터 : . 1 \ n-당량 \ 당량 64 . 1 ≤ N- ≤ . 6 . 4, 0 \ 당량 K \ ^ LT N-2 0 ≤ K < 2 N-
#INCLUDE <알고리즘> #INCLUDE <iostream> #INCLUDE <CString을> #INCLUDE <cstdio> #INCLUDE <cmath> 네임 스페이스를 사용하여 표준; 긴 부호 길이 맥스 = 1; INT의 N, 여기서 = 1; 확인 BOOL; 긴 부호 길이 K; BOOL A [10000]; 주 () {int로 CIN >> >> N (k)를; 위한 (INT 난 = 1; N I <; I ++) { 맥스 * = 2; } 확인 = 1; 반면 (맥스> 0) { 경우 (OK == 1) { // COUT << 맥스 << ''<< K << ENDL; 경우 (맥스> K) { A [여기서 ++] = 0; } 다른 { K- = 맥스; A [여기서 ++] = 1; 0 = 정상; } 맥스 / = 2; 잇다; } (OK == 0) {경우 // COUT << 맥스 << ''<< K << ENDL; 경우 (맥스> K) { A [여기서 ++] = 1; 1 = 정상; } 다른 { K- = 맥스; A [여기서 ++] = 0; } 맥스 / = 2; 잇다; } } 에 대해 (INT 나 = 1; I <= N; I ++) { printf와 ( "%의 D"는 [I])를; } 0을 반환; }