原题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个元素的数组,你可以按照奇数-偶数-奇数... 或者偶数-奇数-偶数...的顺序删除数组中元素 直至不能再删, 问最后留下的元素的和的最小值