PTA 1113 Integer Set Partition (25 分)

106 阅读1分钟

题目

Given a set of N (>1) positive integers, you are supposed to partition them into two disjoint sets A 1 ​ and A 2 ​ of n 1 ​ and n 2 ​ numbers, respectively. Let S 1 ​ and S 2 ​ denote the sums of all the numbers in A 1 ​ and A 2 ​ , respectively. You are supposed to make the partition so that ∣n 1 ​ −n 2 ​ ∣ is minimized first, and then ∣S 1 ​ −S 2 ​ ∣ is maximized.

Input Specification: Each input file contains one test case. For each case, the first line gives an integer N (2≤N≤10 5 ), and then N positive integers follow in the next line, separated by spaces. It is guaranteed that all the integers and their sum are less than 2 31 .

Output Specification: For each case, print in a line two numbers: ∣n 1 ​ −n 2 ​ ∣ and ∣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
结尾无空行

解题思路

N = int(input())
inputList = list(map(int, input().split()))
# N = int("13")
# inputList = list(map(int, "110 79 218 69 3721 100 29 135 2 6 13 5188 85".split()))
# 排序后,从中间前后分割,然后求差值
inputList.sort()
fenge = N//2
sum1 = sum(inputList[:fenge])
sum2 = sum(inputList[fenge:])
# print(sum1,sum2)
# print(abs(sum1-sum2))
print(N%2,abs(sum1-sum2))