题意:从一个序列中删除数据,只能按奇数偶数奇数或者偶数奇数偶数这样间隔着来删除,删到没有合适的数字可选时就结束,然后计算剩下数字的和,输出最小的和。
解:简单排序,然后统计出偶数个数cnt1和奇数个数cnt2,如果奇数偶数个数差大于等于2则计算最小的cnt1-cnt2-1个偶数之和,偶数多时(或者cnt2-cnt1-1个奇数之和,奇数多时),否则都输出0。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,a[2010];
int cnt=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]%2==0)
cnt++;
}
sort(a,a+n);
if((n%2==0&&cnt==n/2)||(n%2!=0&&(cnt*2+1==n||cnt*2-1==n)))
cout<<'0'<<endl;
else
{
int sum=0,j=0;
if(cnt>n/2)
{
for(int i=0;i<n&&j<2*cnt-n-1;i++)
{
if(a[i]%2==0)
{
sum+=a[i];
j++;
}
}
}
else
{
for(int i=0;i<n&&j<n-2*cnt-1;i++)
{
if(a[i]%2!=0)
{
sum+=a[i];
j++;
}
}
}
cout<<sum<<endl;
}
return 0;
}