Về 0
Cho mảng \(a\) gồm các số nguyên không âm.
Bạn có thể tạo ra một mảng \(b\) mới tinh bằng cách chọn một số nguyên \(x\) sau đó biến \(a_i\) thành \(b_i\) với \(b_i = a_i \oplus x\).
Trong đó \(\oplus\) là phép toán XOR của hai số nguyên.
XOR là phép toán hoặc loại trừ giữa hai số nhị phân. Kết quả của phép XOR giữa hai bit là:
1 nếu hai bit khác nhau.
0 nếu hai bit giống nhau.
Ví dụ:
* 0 ⊕ 0 = 0
* 1 ⊕ 1 = 0
* 1 ⊕ 0 = 1
* 0 ⊕ 1 = 1
Khi áp dụng phép XOR vào các số nguyên, ta thực hiện phép XOR bit-by-bit trên từng cặp bit của hai số.
Ví dụ cụ thể với a = 5, b = 3, kết quả a ⊕ b = 6
101 (5 trong hệ nhị phân)
⊕
011 (3 trong hệ nhị phân)
---
110 (6 trong hệ nhị phân)
Trong hầu hết các ngôn ngữ lập trình thì XOR được thể hiện bằng ký tự '^'.
Giả sử C++:
#include <bits/stdc++.h>
using namespace std;
main(){
int a = 3,b=5;
int c = a^b;
cout << c; // Kết quả c = 6
}
Bạn có thể chọn một số \(x\) sao cho giá trị của \(b_1 \oplus b_2 \oplus ... \oplus b_n\) bằng \(0\) không?
Lưu ý: Đề bài đảm bảo rằng nếu tồn tại \(x\) thoả mãn thì tồn tại \(x\) thoả mãn với \(0 \le x \le 2^8\).
Đầu vào
Dòng đầu tiên chứa số nguyên \(T\) là số lượng testcase. \((1 \le T \le 1000)\)
Dòng đầu tiên của mỗi testcase chứa số nguyên \(n\) là số lượng phần tử của mảng \(a\). \((1 \le n \le 10^6)\)
Dòng thứ hai của mỗi testcase gồm \(n\) số nguyên \(a_i\). \((0 \le a_i < 2^8)\)
Đầu vào đảm bảo tổng số lượng \(n\) ở tất cả các testcase không vượt quá \(10^6\).
Đầu ra
In ra \(T\) dòng, mỗi dòng chứa duy nhất số nguyên \(x\) nếu tồn tại \(x\) thoả mãn \((0 \le x < 2^8)\), hoặc \(-1\) nếu không tồn tại số nào thoả mãn.
Giới hạn
\(50\%\) số test: \(1 \le n \le 10^3\).
\(50\%\) số test: Không có ràng buộc gì thêm.
Ví dụ
Đầu vào
5
3
1 2 5
3
1 2 3
4
0 1 2 3
4
1 2 2 3
1
1
Đầu ra
6
0
0
-1
1
Giải thích
Ở testcase đầu tiên, với \(x = 6\) ta tạo được mảng \(b\) \([7, 4, 3]\) và \(7 \oplus 4 \oplus 3 = 0\).
Comments