CodeForces 1144B

原题https://vjudge.net/problem/CodeForces-1144B

#include<bits/stdc++.h>
using namespace std;
vector<int>odd,even;
int main() {
    int n,x;
    scanf("%d",&n); 
    for(int i=1; i<=n; i++) {
    scanf("%d",&x);
        if(x&1)  //判断是不是奇数
            odd.push_back(x);
        else
            even.push_back(x);
    }
    sort(odd.begin(),odd.end()); //从小到大
    sort(even.begin(),even.end()); //从小到大排序
    int size=min(odd.size(),even.size());
    //注意对于向量x,x.size()返回的是无符号数,
    //如果它减去一个大于大的数就会溢出,因此要强制类型转换。
    int sum1=0;
    for(int j=0; j<(int)odd.size()-size-1; j++)  //先奇数(可多删除一个奇数)
    sum1+=odd[j];
    for(int j=0; j<(int)even.size()-size; j++)
    sum1+=even[j];
    int sum2=0;
    for(int j=0; j<(int)even.size()-size-1; j++) //先偶数(可多删除一个偶数)
    sum2+=even[j];
    for(int j=0; j<(int)odd.size()-size; j++)
    sum2+=odd[j];
    printf("%d
",min(sum1,sum2));
    return 0;
}
/*给定有n个元素的数组,你可以按照奇数-偶数-奇数...
或者偶数-奇数-偶数...的顺序删除数组中元素
直至不能再删,
问最后留下的元素的和的最小值 
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11630428.html