AcWing 1603. 整数集合划分
原题链接
简单
作者:
谷心
,
2021-07-15 17:47:29
,
所有人可见
,
阅读 162
题目思路
- 用flag表示集合能否对半划分
- s1为n/2个最小数之和,s2为n/2+flag个最大数之和
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
int num[N];
int main()
{
scanf("%d", &n);
int flag = n % 2;
for(int i = 0; i < n; i ++) scanf("%d", &num[i]);
sort(num, num+n);
int s1 = 0, s2 = 0;
for(int i = 0, j = n-1; i < n/2; i ++, j --)
s1 += num[i], s2 += num[j];
if(flag)
s2 += num[n/2];
printf("%d %d\n", flag, s2 - s1);
}