题目链接
https://www.luogu.org/problem/P1209
每次贪心从间隔最大的两个之间断开
/**
* P1209
* @author Hongchuan CAO
*/
import java.util.Arrays;
import java.util.Scanner;
import java.util.logging.Logger;
public class Main {
public static int[] arr;
public static int[] dis;
public static int M,S,C;
static Logger logger = Logger.getLogger("ACM");
public static void get_data(){
Scanner in = new Scanner(System.in);
M = in.nextInt();
S = in.nextInt();
C = in.nextInt();
arr = new int[C];
dis = new int[C-1];
for(int i=0;i<C;i++){
arr[i] = in.nextInt();
}
in.close();
}
public static void solve(){
Arrays.sort(arr);
//
if(M == 1){
System.out.println(arr[C-1]-arr[0] + 1);
return ;
}else if(M>=C){
System.out.println(C);
return ;
}
for(int i=0;i<C-1;i++){
dis[i] = arr[i+1] - arr[i] - 1;
}
Arrays.sort(dis);
int result = arr[C-1] - arr[0] + 1;
for(int i=C-2;i>C-1-M;i--){
logger.info(Integer.toString(result));
result = result - dis[i];
}
System.out.println(result);
}
public static void main(String arg[]){
get_data();
solve();
}
}
借此总结一下Java数组排序
使用Arrays.sort()功能
//默认对数组中所有值进行升序排序
Arrays.sort(arr);
如果想要降序排列,需要重写Compare接口,并将接口传到Arrays.sort()中:
参数列表
/**
*Arrays.sort
*@author Hongchuan CAO
*/
package ACM;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main{
public static void main(String arg[]){
Integer[] arr = new Integer[20];
Scanner in = new Scanner(System.in);
for(int i=0;i<9;i++){
arr[i] = in.nextInt();
}
Comparator cmp = new MyComparator();
//降序排列
Arrays.sort(arr,0,9,cmp);
for(int i=0;i<9;i++){
System.out.print(arr[i]+ " ");
}
}
}
class MyComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2){
if(o1<o2) return 1;
else if(o1>o2) return -1;
else return 0;
}
}