Codeforces - Array Splitting

题目链接:Codeforces - Array Splitting


考虑如果分成3堆。那么答案为:

a[i]-a[1] + a[j]-a[i+1] + a[n]-a[j+1]

所以其实就是 a[n]-a[1] 然后减去k-1个最大的相邻间的差值。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=3e5+10;
int n,k,a[N],res;
vector<int> v;
signed main(){
	cin>>n>>k;
	if(n==k)	return puts("0"),0;
	for(int i=1;i<=n;i++){
		cin>>a[i];	if(i>1)	v.push_back(a[i]-a[i-1]);
	}
	sort(v.begin(),v.end(),greater<int>());	res=a[n]-a[1];
	for(int i=0;i<k-1;i++)	res-=v[i];
	cout<<res;
	return 0;
}
发布了725 篇原创文章 · 获赞 244 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104862214
今日推荐