问题 E: 阿蒙的异或小课堂

问题 E: 阿蒙的异或小课堂

时间限制: 1 Sec  内存限制: 128 MB
提交: 429  解决: 221
[状态] [讨论版] [提交] [命题人:]
题目描述

在计算机科学中,异或运算是一种常见的逻辑运算。异或运算在校验和、加密等方面有广泛的应用。在 C/C++ 中我们用 "^"
表示异或运算,它和 +,-,一样是需要两个操作数的运算符。使用代码
printf("%d", (a ^ b));
即可在计算机打印两个整数 a 和 b 异或的结果。

异或运算规则如下
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
两个整数进行异或运算,指的是它们转成二进制后(位数不同的在前面补 0),每一位相互异或的结果再转成十进制。

例如:
1 ^ 3 =  2 ,即 01 ^ 10 = 11

异或作为一种重要的运算,它有如下性质:
  • 归零性 a ^ a = 0;
  • 交换律 a ^ b = b ^ a;
  • 结合律 a ^ b ^ c = c ^ b ^ a。
恭喜你现在已经学会异或运算啦!快来写一道题来练练手吧!

定义 x 为长度为 n 的数组 a 的美丽值,使得 x 满足下面的条件
x ^ a1 ^ a2 ^ a3 ^ ... ^ an = 0
现在你得到了一个数组 a,请求出它的美丽值
(这里的 "^" 表示按位异或)

输入
一共两行,第一行一个整数 n 表示数组长度。 1 =< n <= 1e5
第二行 n 个整数表示 ai,1 <= ai <= 1e9。
输出
一个整数表示数组 a 的美丽值,如果有多个美丽值,您可以输出任意一个。
如果不存在美丽值,输出 -1。
样例输入 Copy
2
1 2
样例输出 Copy
3