2014-10-12 3 views
0

I이 code광고가 배열

를 판독하고이 종류의 선언 혼란 :이 선언의 의미 무엇 몰라 pair <int, int> approach[1 << 18][17]

: 방법 [1 < < 18] [17] ;

아무도 도와 줄 수 있습니까? 미리 알아두기

답변

3

이 문맥에서 <<은 비트 왼쪽 시프트 연산자입니다. 1 << 181의 이진 표현을 취하고이를 18로 왼쪽으로 시프트 함을 의미합니다. 이것은 2 (2의 거듭 제곱 또는 262144)입니다. 그래서 당신은 쌍의 매우 큰 2 차원 배열이 : 그것은 단순히 18

코드는 약간의 설명이 누락의 힘에 2^18, 2를 의미

pair <int, int> approach[262144][17]; 
2

<<은 비트 왼쪽 시프트 연산자입니다.

따라서 1 << 18은 2 의 값을 갖는 정수 상수입니다.

1

을, 유일한 진짜 좋은 정보는

입니다 그래서

pair <int, int> approach[1 << 18][17] 

순열을 저장하는 데 사용될 수있는 자리 치환에 대한

// SGU 502 -- Digits Permutation 

아의, 순열에 대한 제한이 없다면 순열의 양은 N이어야합니다. (바라건대 N! < = (1 < < 18)).

그러나 그 정의는 그것에 대해 아무 것도 말하지 않으며, 우리가 그것을 더 명확하게 (잘하면 바르게) 만들 수 있는지 보도록합니다.

const int maxLength = 17; 
const int maxPermutation = 1 << (maxLength+1); 
pair <int, int> approach[maxPermutation ][maxLength] 
static_assert(factorial(maxLength) <= maxPermutation, "approach might not be able to hold all permutations");