题解:P12156 [蓝桥杯 2025 省 Java B] 电池分组
Peruere_Arlecchino · · 题解
一、题目概述
本题出自蓝桥杯 2025 省赛 Java B 组,要求对实验室新研发的 YES,否则输出 NO。
二、输入输出要求
输入格式
第一行包含一个整数
输出格式
对于每个测试用例,输出一行。如果可以将能量电池分成两组,使得这两组能量电池的能量值异或和相等,则输出 YES;否则,输出 NO。
三、解题思路
本题的关键在于利用异或运算的性质来判断是否能进行符合要求的分组。异或运算(用符号 ^ 表示)具有以下重要性质:
交换律:a ^ b = b ^ a,这意味着异或运算中操作数的顺序不影响结果。
结合律:(a ^ b) ^ c = a ^ (b ^ c),可以随意调整异或运算的计算顺序。
自反性:任何数和自身异或结果为 a ^ a = 0。
与 a ^ 0 = a。
假设可以将 S = x ^ x。根据异或运算的自反性可知 x ^ x = 0,所以如果所有电池能量值的异或和不为
四、代码实现
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
int xor_sum = 0;
for (int i = 0; i < N; ++i) {
int a;
cin >> a;
xor_sum ^= a;
}
if (xor_sum == 0 && N >= 2) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}