公路维修问题
题目描述
由于长期没有得到维修,A国的高速公路上出现了 n 个坑。为了尽快填补好这 n 个坑,A国决定对 m 处地段采取交通管制。为了求解方便,假设A国的高速公路只有一条,而且是笔直的。现在给出 n 个坑的位置,请你计算,最少要对多远的路段实施交通管制?
输入格式
输入数据共两行,第一行为两个正整数 n,m(2≤m≤n≤15000)。第二行给出了 n 个坑的坐标(坐标值均在长整范围内,按从小到大的顺序给出,且不会有两个点坐标相同)。
输出格式
仅一行,为最小长度和。
样例 #1
样例输入 #1
18 4
3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43
样例输出 #1
25
提示
[样例说明]
交通管制的地段分别为:3−8,14−21,25−31,40−43。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int x[n],distance[n-1],sum=0;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int j=0;j<n;j++)
{
distance[j]=x[j+1]-x[j];
}
sort(distance,distance+(n-1));
for(int k=0;k<n-m;k++)
{
sum+=distance[k];
}
cout<<sum+m<<endl;
return 0;
}
//先求出每段距离,除去m-1段最长距离之外,剩下距离求和,但区间直接的距离=最右边-最左边+1;有m个区间,所以+m