AT_joig2025_a 题解

· · 题解

思路

把所有数按照奇偶性分类并排序。

对于奇数或者偶数,若其个数 \ge k,那么取其前 k 大的和与答案取最大值。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int read(){int x=0;char f=1,ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
int main(){
    int n=read(),k=read();
    vector<int>vc1,vc2;
    for(int i=1;i<=n;++i){
        int a=read();
        if(a&1)
            vc1.push_back(a);
        else vc2.push_back(a);
    }
    sort(vc1.begin(),vc1.end(),greater<>());
    sort(vc2.begin(),vc2.end(),greater<>());
    long long ans=0;
    if(vc1.size()>=k){
        long long sum=0;
        for(int i=0;i<k;++i)
            sum+=vc1[i];
        ans=max(ans,sum);
    }
    if(vc2.size()>=k){
        long long sum=0;
        for(int i=0;i<k;++i)
            sum+=vc2[i];
        ans=max(ans,sum);
    }
    printf("%lld\n",ans);
    return 0;
}