문제
여러분에게는 음이 아닌 정수 n개가 있는 배열 4개가 주어진다. 각 배열에서 하나씩 뽑아서 bitwise xor를 했을 때 k가 되는 쌍의 개수를 구하자.
bitwise xor란, C언어에서 ^에 해당하는 연산이다. a^b의 값은 a와 b를 2진수로 표현한 뒤, 각 자리에 대해 하나만 1이면 1, 아니면 0의 값을 가지는 수이다. 예를 들어 6^5의 값은, 6을 2진수로 표현했을 때 110, 5를 2진수로 표현했을 때 101이며, 4의 자리는 0 (1이 2개), 2의 자리는 1(1이 1개), 1의 자리는 1(1이 1개)이기 때문에 011이 된다.
입력
첫 번째 줄에 자연수 n과 xor를 해서 만들 숫자 k가 주어진다. (1≦k≦10^9)
두 번재 줄부터 4개의 줄에 n개의 정수가 주어진다. 각 정수는 0 이상 10^9 이하이다.
[제한]
부분 문제 1 [30점]
2≦n≦50
부분 문제 2 [70점]
2≦n≦1000
출력
bitwise xor를 해서 k를 만들 수 있는 쌍의 개수를 출력한다.
예제 #1
2 3
0 0
2 0
0 0
0 1
4
예제 #2
2 0
1 10
1 10
1 10
1 10
8
힌트
출처
Google CodeJam Kickstart Mini Practice Round B, 2018camp contest5 problemD