题解:P12156 [蓝桥杯 2025 省 Java B] 电池分组

· · 题解

这题不用想那么复杂,题意是把一堆数分成两堆判断能不能出现两堆的异或值一样的情况。

众所周知异或运算有交换律,也有结合律,而且两个一样的值异或值为零,那么只需要把这堆数全部异或起来看最后值是不是零就行了,如果最后的值为零那就能出现,否则就不能。 下面奉上 CPP 的代码。

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    int n,ans;
    while(t--){
        cin>>n;
        int a[n];
        cin>>a[0];
        ans=a[0];
        for(int i=1;i<n;i++){
            cin>>a[i];  
            ans^=a[i];
        }
        if(ans==0)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;

    }
    return 0;
}