这个题有一个十分简单的做法
我们可以考虑位运算
按位异或(^)
异或,英文为exclusive OR,缩写成xor
异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。
其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
——百度百科
简单来说,就是将异或的两数用二进制表达出来
然后比较每一位
相同返回0,不同返回1
那么我们可以清楚的发现:
a^a=0
0^a=a
a^b^a=b
代码由此可以简洁的写出
#include<bits/stdc++.h> using namespace std; inline int read() { int a=0,b=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') b=-1; c=getchar(); } while(c>='0'&&c<='9') { a=(a<<3)+(a<<1)+c-'0'; c=getchar(); } return a*b; } inline void out(int n) { if(n<0) { putchar('-'); n=-n; } if(n>=10) out(n/10); putchar(n%10+'0'); } int n,m,ans; int main() { n=read(); for(int i=1;i<=n;i++) { m=read(); ans^=m; } out(ans); return 0; }