1 条题解

  • 0
    @ 2025-8-24 23:09:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 封禁用户
    None

    搬运于2025-08-24 23:09:45,当前版本为作者最后更新于2025-02-14 14:17:09,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    简单题。开两个数组 evenevenoddodd 分别存储所有偶数/奇数卡牌上的整数,然后对于每个数 AiA_i,如果它是偶数就存到 eveneven 数组,否则就存到 oddodd 数组。因为是求最大得分,所以把两个数组从大到小排序,如果偶数超过 KK 个,就取前 KK 个求和,奇数同理,如果超过 KK 个就取前 KK 个求和,然后输出偶数和与奇数和的最大值。

    #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

    [JOIG 2025] カードゲーム 4 / Card Game 4

    信息

    ID
    11409
    时间
    2000ms
    内存
    1024MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者