题目
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))