【排序】
【排序】
本条博客仅收入纯排序相关的题目
【推公式】Transmission Mission
https://atcoder.jp/contests/abc414/tasks/abc414_d
题目大意
思路
首先排序位置
如果最开始只有一个基站:只能建在最中间,且信号强度为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;
}