寒冬暖炉
时间限制: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行给出一个整数T_i,表示第i位客人将在时刻T_i抵达,并且将在时刻离开。

输出描述:

输出数据到标准输出中。
输出一行一个整数,表示暖炉工作的最少时间是多少。
示例1

输入

复制
3 2
1
3
6

输出

复制
4

说明

在这一天,有三位客人要拜访JOI。按照下述方法开关暖炉,可以保证每位客人拜访的时候暖炉均是工作的。JOI总共开启两次暖炉,并且暖炉总工作时间为(4-1)+(7-6)=4。
JOI会在时刻1即第一位客人抵达的时候开启暖炉,并在时刻4即第二位客人离开的时候关闭暖炉。
JOI会在时刻6即第三位客人抵达的时候开启暖炉,并在时刻7即第三位客人离开的时候关闭暖炉。
示例2

输入

复制
3 1
1
2
6

输出

复制
6

说明

在这个样例中,JOI只能开启一次暖炉,因此他在第一位客人抵达的时候即时刻$1$开启暖炉,并在第三位客人离开的时候即时刻$7$关闭暖炉。
注意前一位客人离开的时候可以有另一位客人抵达。
示例3

输入

复制
3 3
1
3
6

输出

复制
3

说明

在这个样例中,JOI可以在每次客人抵达的时候开启暖炉,并且在每次客人离开的时候关闭暖炉。
示例4

输入

复制
10 5
1
2
5
6
8
11
13
15
16
20

输出

复制
12

备注:

对于所有输入数据,有,1≤K≤N,(1≤i≤N),(1≤i≤N-1)。

CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2347