Transmission Mission_abc414_d_分析与解答

29 阅读1分钟

首先将x升序排序。 如果一个基站覆盖了第l到第r号车站(l<=r),那其最小的x是X_r-X_l,要让x的和尽量小,每个基站覆盖的车站范围应该不相交:

image.png

称两个相邻车站间的距离是一个“区间”,

有m个基站,那就有(m-1)个空挡区间,那么则有(n-1)-(m-1)=n-m个区间要取,取前n-m小的区间就可以。

image.png
/*  
using C++20 standard  
upd:25.10.16  
*/  
#include<bits/stdc++.h>  
using namespace std;  
typedef long long ll;  
typedef unsigned long ul;  
typedef unsigned long long ull;  
typedef pair<ll,ll> pll;  
typedef tuple<ll,ll,ll> tll;  
  
#define fastio ios::sync_with_stdio(0);cin.tie(0);  
#define fin freopen("D:/in.txt","r",stdin);  
#define fout freopen("D:/out.txt","w",stdout);  
#define lowbit(x) (x&(-x))  
  
const ll maxn=5e5+5;  
  
ll x[maxn],d[maxn];  
ll n,m;  
  
int main()  
{  
    cin>>n>>m;  
    for(ll i=1;i<=n;i++) cin>>x[i];  
      
    stable_sort(x+1,x+1+n);  
    for(ll i=1;i<=n-1;i++) d[i]=x[i+1]-x[i];  
      
    stable_sort(d+1,d+1+n-1);  
      
    ll ans=0;  
    for(ll i=1;i<=n-m;i++) ans+=d[i];  
    cout<<ans<<"\n";  
      
    return 0;  
}