其实也就是今天看了hdoj acm steps1.2.3的题解才顿悟的,原来也看到过这个^运算,没想到有多大用处,这个题目最开始的思路肯定是先弄一个字典,然后检查重复,但是最开始的一次居然连内存都超了。。。后来改进了一下变成了超时,想了两天,无果,看题解,被震到了。。。。。
按位异或的计算非常简单,这个题的解题根据是异或运算的交换率和结合律,也就是(AB)C=A(BC),以及AB=BA,证明都是非常简单的,可以推导也可以验证。这样在处理1.2.3这个问题的时候就可以对所有的输入进行异或运算。由于除了你要找的那个数字,其他的数字都有偶数个(很关键!!),所以连续的运算之后的结果必然是那个只出现了一次的数字,因为你可以把所有的相同的数字配对放在一起(交换律和结合律),成为aabbccdd......的形式,而一个数字和自己进行异或运算的结果是0,所以如果要求的数是x,那么最后的结果就是x^0=x
居然可以这么简单。。。。。