1113 Integer Set Partition (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/acm_zh/article/details/87922180

1113 Integer Set Partition (25 分)

Given a set of NNN (>1> 1>1) positive integers, you are supposed to partition them into two disjoint sets A1A_1A​1​​ and A2A_2A​2​​ of n1n_1n​1​​ and n2n_2n​2​​ numbers, respectively. Let S1S_1S​1​​ and S2S_2S​2​​ denote the sums of all the numbers in A1A_1A​1​​ and A2A_2A​2​​, respectively. You are supposed to make the partition so that ∣n1−n2∣|n_1 - n_2|∣n​1​​−n​2​​∣ is minimized first, and then ∣S1−S2∣|S_1 - S_2|∣S​1​​−S​2​​∣ is maximized.

Input Specification:

Each input file contains one test case. For each case, the first line gives an integer NNN (2≤N≤1052 \le N \le 10^52≤N≤10​5​​), and then NNN positive integers follow in the next line, separated by spaces. It is guaranteed that all the integers and their sum are less than 2312^{31}2​31​​.

Output Specification:

For each case, print in a line two numbers: ∣n1−n2∣|n_1 - n_2|∣n​1​​−n​2​​∣ and ∣S1−S2∣|S_1 - S_2|∣S​1​​−S​2​​∣, separated by exactly one space.

Sample Input 1:

10
23 8 10 99 46 2333 46 1 666 555

Sample Output 1:

0 3611

Sample Input 2:

13
110 79 218 69 3721 100 29 135 2 6 13 5188 85

Sample Output 2:

1 9359
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
	int n;
	cin>>n;
	vector<int> v(n);
	for(int i = 0;i < n;i++){
		cin >> v[i];
	}
	sort(v.begin(),v.end());
	int cnt = 0;
	if(n%2==0){
		cnt = 0;
	}else{
		cnt=1;
	}
	int sum1 = 0,sum2 = 0;
	for(int i = 0;i < n/2;i++){
		sum1+=v[i];
	}
	for(int i = n/2;i < n;i++){
		sum2+=v[i];
	}
	printf("%d %d\n",cnt,abs(sum1-sum2));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/acm_zh/article/details/87922180