集训作业 洛谷P1469 找筷子

这个题的代码真的是短的不得了呢。

有个神奇的东西叫异或,写起来是这个样子的^。

这个东西可以查看2个数的二进制某位是否相同,相同取0,不同取1。虽然我用的不熟,但我可以想出来,如果2个相同的数异或,答案一定是0。因为他们每一位都一样嘛。

而且异或是满足交换律的,顺序什么的不重要,于是我们只要把所有数异或起来,看剩下的数是那个,那个就是多出来的筷子。

短小的代码:

#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long a,b,shu;
int main()
{
	scanf("%lld",&a);
	for(int i=0;i<a;i++)
	{
		scanf("%lld",&b);
		shu^=b;//异或
	}
	printf("%lld",shu);
	return 0;
}

总结:会异或,而且可以想到,就非常好做。

原文地址:https://www.cnblogs.com/lichangjian/p/12853208.html