先看AC代码
#include<iostream>
#include<algorithm>
using namespace std;
int a[(int)1e5+10];
int main(){
int n;cin>>n;
for(int i = 0 ; i < n ; i ++ ) cin>>a[i];
sort(a,a+n);
int k = n / 2;
int sum1 = 0 , sum2 = 0;
for(int i = 0 , j = n - 1 ;i < k ; ++ i , -- j ){
sum1+=a[i];
sum2+=a[j];
}
if(n & 1) cout<<1<<" "<<sum2 + a[k] - sum1<<endl;
else cout<<0<<" "<<sum2 - sum1 <<endl;
return 0;
}
这个题目要保证 $n_1 - n_2$ 最小只有一种方案,就是让两个集合大小尽力接近,所以偶数是两个集合元素个数相同,奇数是有一个集合比另一个集合多一个。
然后就是求大的和减去小的和就可以了/