1 条题解
-
0
自动搬运
来自洛谷,原作者为

封禁用户
None搬运于
2025-08-24 23:09:45,当前版本为作者最后更新于2025-02-14 14:17:09,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
简单题。开两个数组 和 分别存储所有偶数/奇数卡牌上的整数,然后对于每个数 ,如果它是偶数就存到 数组,否则就存到 数组。因为是求最大得分,所以把两个数组从大到小排序,如果偶数超过 个,就取前 个求和,奇数同理,如果超过 个就取前 个求和,然后输出偶数和与奇数和的最大值。
#include <iostream> #include <algorithm> using namespace std; using LL = long long; const int N = 1e5 + 5; LL cur, even[N], cnt, odd[N]; int main() { int n, k; cin >> n >> k; for (int i = 1; i <= n; i++) { LL x; cin >> x; if (!(x % 2)) even[++cur] = x; else odd[++cnt] = x; } sort(even + 1, even + 1 + cur, greater<LL>()); sort(odd + 1, odd + 1 + cnt, greater<LL>()); LL esum = 0, osum = 0; if (cur >= k) { for (int i = 1; i <= k; i++) esum += even[i]; } if (cnt >= k) { for (int i = 1; i <= k; i++) osum += odd[i]; } cout << max(esum, osum); return 0; }
- 1
信息
- ID
- 11409
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者