(↑限制空间4MB)
这是一道关于位运算的题目,这里介绍一些关于异或 的性质.
1、交换律
2、结合律(即(a^b)^c == a^(b^c))
3、对于任何数x,都有x^x=0,x^0=x
4、自反性 A ^ B ^ B = A ^ 0 = A
注意到A ^ B ^ B = A ^ 0 = A,再根据交换律知如果把一个数列所有的数放在一起异或一下,那么最后得到的数就是数列中唯一的出现了奇数次的数.
所以这题的实现非常简单:
#include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; int n, ans; inline int read() { char ch = getchar(); int x = 0, f = 1; while (ch > '9' || ch < '0') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } int main() { n = read(); for (int i = 1; i <= n; i++) ans ^= read(); printf("%d ", ans); }