OR이 아니면? XOR

면접 대비

시간 제한1초메모리 제한1024 MB

요약
길이 N인 수열에서 j - i <= M이고 A_i XOR A_j = K인 (i, j) 쌍의 개수를 구한다.
난이도

보통10점 중 5점

유형
슬라이딩 윈도우, 해시맵, 비트 연산
정답자
아직 제출이 없습니다

문제

길이가 NN인 정수 수열 AA와 정수 MM, KK가 주어질 때, 아래 조건을 만족하는 (i,j)(i, j) 쌍의 개수를 구하시오.

  1. A_i⊕A_jA\_i ⊕ A\_j = KK
  2. j−ij - i ≤\le MM (i<j)(i < j)

A_iA\_i는 AA의 ii번째 원소를 의미한다.

입력

첫 번째 줄에 수열의 길이 NN, MM, KK가 주어진다. (2≤N≤106;(2 \le N \le 10^6; 1≤M≤N−1;1 \le M \le N - 1; 0≤K≤217−1)0 \le K \le 2^{17} - 1)

두 번째 줄에 수열 AA의 원소 A_iA\_i가 공백으로 구분되어 NN개 주어진다. (0≤A_i≤100,000)(0 \le A\_i \le 100\\,000)

출력

첫 번째 줄에 조건을 만족하는 (i,j)(i, j) 쌍의 개수를 출력한다.

힌트

음이 아닌 두 정수 AA, BB의 배타적 논리합 A⊕BA ⊕ B는 다음과 같이 정의된다.

이진법으로 생각했을 때, AA의 2k2^k의 자릿수와 BB의 2k2^k의 자릿수가 서로 다르면 A⊕BA ⊕ B의 2k2^k의 자릿수가 11이고, 같으면 A⊕BA ⊕ B의 2k2^k의 자릿수가 00이다. (단, k≥0k \geq 0)

예를 들어 12⊕1012 ⊕ 10은 1212 = 1100_(2)1100\_{(2)}, 1010 = 1010_(2)1010\_{(2)}이므로 1100_(2)⊕1010_(2)1100\_{(2)} ⊕ 1010\_{(2)} = 0110_(2)0110\_{(2)} = 66이다.

예제4

  1. 예제 1

    입력
    4 1 2
    1 2 3 1
    
    예상 출력
    1
    
  2. 예제 2

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

    입력
    4 3 7
    2 5 2 5
    
    예상 출력
    4
    
  4. 예제 4

    입력
    9 4 3
    5 7 9 11 13 15 17 19 21
    
    예상 출력
    0