咋整?
  • 板块灌水区
  • 楼主str2011
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/4/12 23:33
  • 上次更新2024/4/13 10:08:24
查看原帖
咋整?
1123159
str2011楼主2024/4/12 23:33

一个由N个整数构成的集合{a 1,a 2 ,⋯,a N}。 在这里,我们定义集合的"大小"为集合中最大元素和集合中最小元素的差。例如,集合{1,7,4}的最大值7最小值1,所以这个集合的大小为7−1=6现在想要把这个 N个数的集合划分成K个集合,使得K个集合的"大小"的总和最小。

1≤K≤N≤5×10^4

0≤ai≤10^12

#include<iostream>
#include<algorithm>
using namespace std;
long long a[50010];
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int avg=n/k,av=avg;
	long long maxn=-1,minn=1e9,ans=0;
	for(int i=1;i<=k;i++){
		for(int j=1;j<=avg;j++){
			if(i==k && j==av){
				avg+=n-k*avg;
			}
			maxn=max(maxn,a[i]);
			minn=min(minn,a[i]);
		}
		ans+=maxn-minn;
		maxn=-1;
		minn=1e9;
	}
	cout<<ans<<endl;
	return 0;
}
2024/4/12 23:33
加载中...