专栏文章

题解:B4179 [厦门小学生 C++ 2024] 战线巡逻

B4179题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miq5c5du
此快照首次捕获于
2025/12/03 23:12
3 个月前
此快照最后确认于
2025/12/03 23:12
3 个月前
查看原文
这道题目的标签是贪心,所以我也用贪心的思路讲解。
这道题目消耗的体力就是各个需要巡逻的点之间的距离,而每多一个哨兵就可以减少其中一段需要消耗的体力,列举三个样例就会发现,一共可以减少 (k1)(k-1) 个距离。
代码如下:
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 条评论,欢迎与作者交流。

正在加载评论...