题目
题目的意思是给你n个数,让你分成两部分,这两部分数的个数相差要最小并且两部分相减的和最大
思路
要使两部分数个数相差最小肯定就是平分/2,如果是一个偶数个数相差为0,如果是一个奇数个数相差为1,。
要求两部分数的和相减值最大,所以要排序直接用sort排就可以,只有第一部分数为小的数且个数少时与第二部分为大的数和相减得到的数才能最大。所以当n为奇数时,第二部分的数比第一部分要多一个。
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,s=0,a[100010]={0};
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n/2;i++)//第一部分小的数
s-=a[i];
for(int i=n/2+1;i<=n;i++)//第二部分大的数
s+=a[i];
cout<<n-(n/2)*2<<" "<<s;
return 0;
}