信息
- ID
- 5527
- 时间
- 2000ms
- 内存
- 4MiB
- 难度
- 2
- 标签
- 递交数
- 22
- 已通过
- 12
- 上传者
#include <iostream>
using namespace std;
int x, n, ans;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x;
ans ^= x;
}
cout << ans;
}
又在为迷途的羊羔coder们指点迷津了
我为看不懂的解释一下吧:
如果有一根筷子长度出现奇数次,其他的筷子长度都出现偶数次,可以利用异或的性质来求解。 异或运算有以下特点: a ^ a = 0,相同的数异或结果是 0。 a ^ 0 = a,一个数与 0 异或结果是它自己。 异或运算是交换律和结合律的,即 a ^ b ^ c = a ^ (b ^ c)。 利用这些性质,当我们对所有的筷子长度进行异或操作时,相同的长度会被消除(因为 a ^ a = 0),最终留下的就是那个出现奇数次的长度。