【排序】

【排序】

本条博客仅收入纯排序相关的题目

【推公式】Transmission Mission

https://atcoder.jp/contests/abc414/tasks/abc414_d

题目大意

image

思路

首先排序位置
如果最开始只有一个基站:只能建在最中间,且信号强度为x[n]-x[1]
给数组分成*(m-1)段*
假设在第j个点分段:
信号强度为 x[j]-x[1] + x[n]-x[j+1]
->化为(x[n]-x[1]) - (x[j+1]-x[j])
->每次分段都会使答案减少(x[j+1]-x[j])
->求最小答案:枚举x[i]-x[i-1],找前m-1个即可

代码

int n,m;
void solve(){
    cin>>n>>m;
	vector<i64> x(n+1,0);
	for(int i=1;i<=n;i++) cin>>x[i];
	sort(x.begin()+1,x.end(),cmp64);
	vector<i64> pos;
	for(int i=2;i<=n;i++){
		pos.push_back(x[i]-x[i-1]);
	}
	i64 ans=x[n]-x[1];
	sort(pos.begin(),pos.end(),cmp64);
	m--;
	for(int i=n-2;i>=0&&m>0;i--){
		ans-=pos[i];
		m--;
	}
    cout<<ans<<endl;
}
posted @ 2025-07-14 20:37  White_ink  阅读(9)  评论(0)    收藏  举报