题解:AT_abc414_d [ABC414D] Transmission Mission
Song_stok_SZH · · 题解
题目描述
在数轴上有
你需要在数轴上的任意实数坐标位置布置
当某个基站的信号强度设为
请设计基站的位置和信号强度,确保每栋房屋至少被一个基站的信号覆盖,并求出信号强度总和的最小可能值。
约束条件
-
1 \leq M \leq N \leq 5 \times 10^5 -
题解
我们翻译一下题面,是将有
用样例来举例,显然,形成
想让
观察蓝色区间的特点,是相邻两点间最长的和次长的距离。相邻两点确保不会有点不被覆盖,最长和次长保证蓝色区间的长度之和最大。
此时就完成题目的转化,找
代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using db=double;
const ll N=5e5+9;
ll n,m,ans,a[N];
pair<ll,ll> b[N];
inline ll read(){
ll x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
signed main(){
ios::sync_with_stdio(0),cout.tie(0);
n=read();m=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
sort(a+1,a+n+1);//别忘了将样例排序
ans=a[n]-a[1];
b[1].first=0;b[1].second=0;
for(int i=2;i<=n;i++){
b[i].first=a[i]-a[i-1];
b[i].second=i;
}
sort(b+1,b+n+1,[](pair<ll,ll> x,pair<ll,ll> y)->bool{
return x.first>y.first;
});
for(int i=1;i<=m-1;i++){
ans-=(a[b[i].second]-a[b[i].second-1]);
}
cout<<ans<<"\n";
return 0;
}