Description
小志最近喜欢连连看这个游戏,但是连连看太难了,所以他发明了一种简易的连连看,为了简化问题,现在我们有n对整数,每对数字都是相同的,但是为了表明这个连连看是不同的,小志另外多加了一个整数,所以我们现在就有2*n+1个整数,现在小志想知道那个单独的整数,你能帮助他寻找到这个整数吗?
Input
第一行输入一个整数n(1<=n<=10000007)
第二行有2*n+1个整数,每个整数ai的范围为(1<=ai<=1e9);
Output
输出一个整数为那个单独的整数。
Sample
Input
4
1 3 2 1 3 1 2 1 1
Output
1
Hint
根据样例:整数1有5个为奇数个,其他的整数的个数都为偶数个,所以答案为1。
因为数据较大,请使用快速的读入方法,例如scanf输入和printf输出。
题解:异或法
下面是AC代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main( )
{
int n,x;
scanf("%d",&n);
int ans=0;
for(int i=1;i<=2*n+1;i++)
{
scanf("%d",&x);
ans=ans^x;
}
printf("%d\n",ans);
}
异或运算性质:0^n=n,自己异或自己为0,所以可以这样
1^ 2 ^ 3 ^ 4 ^ 1 =2 ^ 3 ^ 4,这样循环,最后只剩下单独的那个,很巧妙。