寒假打卡——AcWing 1603. 整数集合划分
2021-01-26
AcWing 1603. 整数集合划分
题意
给定一个包含 N 个正整数的集合,请你将它划分为两个集合 A1和 A2,其中 A1包含 n1个元素,A2包含 n2 个元素。
集合中可以包含相同元素。
用 S1 表示集合 A1内所有元素之和,S2表示集合 A2内所有元素之和。
请你妥善划分,使得 |n1−n2|尽可能小,并在此基础上 |S1−S2| 尽可能大。
输入格式
第一行包含整数 N。
第二行包含 N 个正整数。
输出格式
再一行中输出 |n1−n2|和 |S1−S2|,两数之间空格隔开。
数据范围
$ 2≤N≤10^5$
保证集合中各元素以及所有元素之和小于 $ 2^31$。
思路:
从小到大排序 记录前n/2的和以及n/2~n的和即可
若n为奇数则两集合相差1反之相差0
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
int n;
int []a=new int [100005];
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
Arrays.sort(a,0,n);
int sum1=0,sum2=0;
for(int i=0;i<n/2;i++) {
sum1+=a[i];
}
for(int i=n/2;i<n;i++) {
sum2+=a[i];
}
sum2-=sum1;
if(n%2==0) sum1=0;
else sum1=1;
System.out.println(sum1+" "+sum2);
}
}
标题:寒假打卡——AcWing 1603. 整数集合划分
作者:xiaob0
地址:https://xiaobo.net.cn/articles/2021/01/26/1611632541842.html