아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이길 수 있는 구간

시간 제한4초메모리 제한256 MB

요약
0부터 2^M-1까지의 순열이 주어질 때, 두 원소를 한 번 교환해 부분 배열의 XOR을 정확히 2^M-1로 만들 수 있는 부분 배열의 개수를 센다.
난이도

어려움10점 중 8점

유형
비트 연산, 누적 합, 조합론, 배열
정답자
아직 제출이 없습니다

문제

정수 MM과, 0,1,2,…,2M−10, 1, 2, \dots, 2^M - 1을 한 번씩 담은 길이 2M2^M의 배열 AA가 주어진다.

컴퓨터가 AA에서 비어 있지 않은 연속한 구간 하나를 고른다. 그 뒤 당신은 서로 다른 두 위치를 골라 그 위치에 있는 두 수를 교환해야 한다. 교환은 반드시 한 번 해야 하고, 고른 두 위치는 구간 안에 있어도 되고 밖에 있어도 되며 한쪽씩 있어도 된다. 교환을 마친 뒤 컴퓨터가 고른 구간 안의 수를 모두 비트 XOR 한 값이 정확히 2M−12^M - 1이면 당신이 이긴다.

컴퓨터가 고를 수 있는 구간은 2M(2M+1)2\frac{2^M(2^M+1)}{2}개다. 그중 당신이 이길 수 있는 구간이 몇 개인지 구하여라.

입력

첫째 줄에 정수 MM (1≤M≤201 \le M \le 20)이 주어진다.

둘째 줄에 배열 AA를 이루는 2M2^M개의 수가 공백으로 구분되어 주어진다. 이 수는 0,1,2,…,2M−10, 1, 2, \dots, 2^M - 1의 순열이다.

출력

당신이 이길 수 있는 구간의 개수를 한 줄에 출력한다.

힌트

첫 번째 예제에서 컴퓨터가 구간 1 2 3을 고르면 당신은 0과 3을 교환해서 이긴다. 이 예제에서는 배열 전체를 고른 경우를 빼면 어떤 구간을 골라도 이길 수 있다.

두 번째 예제에서 컴퓨터가 배열 전체 3 7 0 4 6 1 5 2를 고르면, 어떤 두 수를 교환해도 구간의 XOR 값 0은 그대로다.

예제3

  1. 예제 1

    입력
    2
    0 1 2 3
    
    예상 출력
    9
    
  2. 예제 2

    입력
    3
    3 7 0 4 6 1 5 2
    
    예상 출력
    33
    
  3. 예제 3

    입력
    4
    13 0 15 12 4 8 7 3 11 14 6 10 1 5 9 2
    
    예상 출력
    133