// xor.cpp : Defines the entry point for the console application. // #include #include #include using namespace std; const int MAX = 0x20000; int N, K, A[MAX], B[MAX]; int main(int argc, char* argv[]) { ifstream in; in.open("xor.in"); in >> N >> K; if (N < 1 || N > 100000) { cerr << "Invalid N" << endl; return 1; } if (K < 0 || K > 100000) { cerr << "Invalid K" << endl; return 1; } for (int i = 0; i < MAX; i++) A[i] = B[i] = 0; for (int i = 0; i < N; i++) { int a; in >> a; if (a < 0 || a > 100000) { cerr << "Invalid Ai" << endl; return 1; } A[a]++; if (K != 0) { B[a ^ K]++; } } in.close(); int c = 0; for (int i = 1; i <= 100000; i++) { c += K != 0 ? A[i] * B[i] : (A[i] * (A[i] - 1)) / 2; } ofstream out; out.open("xor.out"); out << (K == 0 ? c : c / 2) << endl; out.close(); return 0; }