公路维修问题
题目描述
由于长期没有得到维修,A国的高速公路上出现了 n n n 个坑。为了尽快填补好这 n n n 个坑,A国决定对 m m m 处地段采取交通管制。为了求解方便,假设A国的高速公路只有一条,而且是笔直的。现在给出 n n n 个坑的位置,请你计算,最少要对多远的路段实施交通管制?
输入格式
输入数据共两行,第一行为两个正整数 n , m ( 2 ≤ m ≤ n ≤ 15000 ) n, m(2\le m \le n\le 15000) n,m(2≤m≤n≤15000)。第二行给出了 n n 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 3-8,14-21,25-31,40-43 3−8,14−21,25−31,40−43。
C++实现
#include
#include
int n,m;
int a[15005],b[15005],ans;
bool cmp(int k,int h){
return k>h;
}
int main(){
scanf(“%d%d”,&n,&m);
for(int i=1;i<=n;i++)
scanf(“%d”,&a[i]);
ans = a[n] - a[1] + 1;
for(int i=1;i<n;i++)
b[i] = a[i+1] - a[i];
std::sort(b+1,b+n,cmp);
for(int i=1;i<m;i++){
ans = ans - b[i] + 1;
}
printf(“%d\n”,ans);
return 0;
}
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容