一个由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;
}