WZK旅游(seek)
【问题描述】
由于长期没有得到维修,A国的高速公路上出现了N个坑。为了尽快填补好这N个坑,A国决定对M处地段采取交通管制。为了求解方便,假设A国的高速公路只有一条,而且是笔直的。现在给出N个坑的位置,请你计算,最少要对多远的路段实施交通管制?
【输入格式】
输入数据共两行,第一行为两个正整数N、M (2<=N<=15000,M<=N)。第二行给出了N个坑的坐标(坐标值均在长整范围内,按从小到大的顺序给出,且不会有两个点坐标相同)。
【输出格式】
仅一行,为最小长度和。
【输入样例】road.in
18 4
3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43
【输出样例】road.out
25
【样例说明】
交通管制的地段分别为:3-8,14-21,25-31,40-43。
【代码】
#include <bits/stdc++.h>
using namespace std;
int a[20005],b[20005],n,m,s = 0;
int main(){
cin>>n>>m;//输入
for(int i=0;i<n;i++){
cin>>a[i];
if(i){//特判是否为0
b[i-1]=a[i]-a[i-1];//计算
}
}
sort(b,b+n);//重要的思路,(其实就是排序)
for(int i=0;i<n-m+1; i++)s+=b[i];//求总和
cout<<s+m<<endl;//输入
return 0;
}