Solo 和 koko 是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量。
现在他们想要将这些积木分成两堆。
哥哥 Solo 负责分配,弟弟 koko 要求两个人获得的积木总重量“相等”(根据 Koko 的逻辑),个数可以不同,不然就会哭,但 koko 只会先将两个数转成二进制再进行加法,而且总会忘记进位(每个进位都忘记)。
如当 25(11001)加 11(01011)时,koko 得到的计算结果是 18(10010):
11001
+01011
--------
10010
Solo 想要尽可能使自己得到的积木总重量最大,且不让 koko 哭。
输入描述
第一行是一个整数 N,表示有多少块积木
- 2 ≤ N ≤ 100
第二行为空格分开的 N 个整数 Ci,表示第 i 块积木的重量
- 1 ≤ Ci ≤ 10^6
输出描述
如果能让 koko 不哭,输出 Solo 所能获得积木的最大总重量;
否则输出“NO”。
用例
| 输入 | 3 3 5 6 |
|---|---|
| 输出 | 11 |
| 说明 | 无 |
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int>vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
sort(vec.begin(), vec.end(), greater<int>());
int sum = 0;
int tmp = 0;
for (int i = 0; i < vec.size() - 1; i++) {
tmp ^= vec[i];
sum += vec[i];
}
tmp ^= vec.back();
if (tmp == 0) {
cout << sum << endl;
} else {
cout << "NO" << endl;
}
return 0;
}