专栏文章
题解:B4179 [厦门小学生 C++ 2024] 战线巡逻
B4179题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miq5c5du
- 此快照首次捕获于
- 2025/12/03 23:12 3 个月前
- 此快照最后确认于
- 2025/12/03 23:12 3 个月前
这道题目的标签是贪心,所以我也用贪心的思路讲解。
这道题目消耗的体力就是各个需要巡逻的点之间的距离,而每多一个哨兵就可以减少其中一段需要消耗的体力,列举三个样例就会发现,一共可以减少 个距离。
代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
const int maxN=1e5+100;
int a[maxN],s[maxN];
int main(){
int k,n,ans=0;
cin>>k>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);//记得排序 。
for(int i=1;i<n;i++){
s[i]=a[i+1]-a[i];//计算每个距离 。
}
sort(s+1,s+n,greater<int>());//给每个距离做降序排序 。
for(int i=k;i<n;i++){
ans+=s[i];//减少 (k-1) 个最大的距离,从 k 开始遍历相加。
}
cout<<ans;
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...