时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
JOI的家里有一个暖炉。JOI君比较耐寒,所以他独自在家里时不用开暖炉,但是有客人的时候就必须要开暖炉了。
这一天,JOI有$N$个客人,第$i$位客人$(1≤i≤N)$到达的时间是时刻$T_i$,并在时刻$T_i+1$离开。不会有多位客人同时到访。
JOI可以在任何时刻开启暖炉,不过在每次开启暖炉的时候会消耗一根火柴。JOI只有$K$根火柴,所以最多只能开启暖炉$K$次。在这一天伊始,暖炉是关着的。
暖炉开着的时候需要燃料。为了节省燃料,JOI想最小化暖炉工作的总时间。
给出JOI的客人们到访的时间以及JOI拥有的火柴根数,你需要编写一个程序计算暖炉最少需要工作多长时间。
输入描述:
从标准输入中读取数据。
第一行包括两个整数N,K,表示有N位客人会拜访JOI,并且JOI拥有K根火柴。
接下来N行,第i+1行给出一个整数
,表示第i位客人将在时刻
抵达,并且将在时刻
离开。
输出描述:
输出数据到标准输出中。
输出一行一个整数,表示暖炉工作的最少时间是多少。
示例1
说明
在这一天,有三位客人要拜访JOI。按照下述方法开关暖炉,可以保证每位客人拜访的时候暖炉均是工作的。JOI总共开启两次暖炉,并且暖炉总工作时间为(4-1)+(7-6)=4。
JOI会在时刻1即第一位客人抵达的时候开启暖炉,并在时刻4即第二位客人离开的时候关闭暖炉。
JOI会在时刻6即第三位客人抵达的时候开启暖炉,并在时刻7即第三位客人离开的时候关闭暖炉。
示例2
说明
在这个样例中,JOI只能开启一次暖炉,因此他在第一位客人抵达的时候即时刻$1$开启暖炉,并在第三位客人离开的时候即时刻$7$关闭暖炉。
注意前一位客人离开的时候可以有另一位客人抵达。
示例3
说明
在这个样例中,JOI可以在每次客人抵达的时候开启暖炉,并且在每次客人离开的时候关闭暖炉。
示例4
输入
复制
10 5
1
2
5
6
8
11
13
15
16
20
备注:
对于所有输入数据,有

,1≤K≤N,

(1≤i≤N),

(1≤i≤N-1)。
CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2347