怎么又是你
Description
相信大家都打了前几天的牛客,会对这道题非常熟悉,
现在改变一个条件,我们再来试一次:
给你一个长度为n的序列a1,a2,a3...,an,和一个整数k。
现在让你把这个n个数分到k个集合内,
使得每个集合的最大值减最小值的和最小。
并输出这个最小值。
Input
第一行给你两个数n,k(1<=k<=n<=300000)
第二行包含n个数a1,a2,a3.....an(1<=ai<=1000000000)
Output
每个集合的最大值减最小值的和最小值
Sample Input 1
2 1 10 20Sample Output 1
10import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Comparator; import java.util.InputMismatchException; import java.util.Scanner; public class Main { // static InputReader sc=new InputReader(System.in); static PrintWriter out=new PrintWriter(System.out); static Scanner sc=new Scanner(System.in); static int n,m; public static void main(String[] args) { // TODO Auto-generated method stub n=sc.nextInt(); m=sc.nextInt(); int[] ch=new int[n]; long ans=0; for(int i=0;i<n;i++) { int a=sc.nextInt(); ch[i]=a; } Arrays.parallelSort(ch); int[] res=new int[n-1]; for(int i=0;i<n-1;i++) { res[i]=ch[i+1]-ch[i]; } Arrays.parallelSort(res); for(int i=0;i<(n-m);i++) { ans+=res[i]; } out.println(ans); out.flush(); out.close(); } } /* 10 8 10 20 30 40 50 100 110 120 130 140 */
失误
最新推荐文章于 2023-07-21 22:18:58 发布