链接:click here
//题意:一组数分成两堆,如果能使两堆数的异或值相等,则满足条件,
//输出和大的一组的和,题目要求使和最大。如果不能输出NO。
//我们知道,两个相等的数和为0,所以对所有进行异或,为0则满足条件,总和减去最小的即为所求的值。
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <algorithm> #include <queue> #include <vector> using namespace std; #define maxn 1005 int V, m; vector<int>G[maxn]; int in[maxn]; int main() { int t,n,m,i,j=1; cin>>t; while(t--) { int s=0; cin>>n; int ss=0; for(i=0;i<n;i++) { cin>>in[i]; ss^=in[i]; s+=in[i]; } sort(in,in+n); printf("Case #%d: ",j++); if(!ss) { cout<<s-in[0]<<endl; } else cout<<"NO"<<endl; } }
时间: 2024-11-07 01:37:38