题解
2025-11-15 16:59:27
发布于:浙江
2阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> even, odd;
for (int i = 0; i < n; ++i) {
int x;
cin >> x;
if (x % 2 == 0) {
even.push_back(x);
} else {
odd.push_back(x);
}
}
// 没有偶数袋,第一步AC狗为0,直接NO
if (even.empty()) {
cout << "NO" << endl;
continue;
}
// 偶数袋降序,奇数袋升序
sort(even.rbegin(), even.rend());
sort(odd.begin(), odd.end());
// 合并顺序:偶数袋在前,奇数袋在后
vector<int> order;
order.insert(order.end(), even.begin(), even.end());
order.insert(order.end(), odd.begin(), odd.end());
// 模拟分配过程
int ac_sum = 0, a_sum = 0;
bool valid = true;
for (int x : order) {
if (x % 2 == 0) {
ac_sum += x;
} else {
a_sum += x;
}
// 检查当前状态是否满足约束
if (ac_sum <= a_sum) {
valid = false;
break;
}
}
cout << (valid ? "YES" : "NO") << endl;
}
return 0;
}
这里空空如也






有帮助,赞一个