AcWing 5478. 分班
原题链接
困难
作者:
小贰
,
2024-03-04 23:47:38
,
所有人可见
,
阅读 32
include[HTML_REMOVED]
using namespace std;
long long a[100005],n,k,s,l,bj,ans;
int main(){
cin>>n>>k>>l;
for(int i=1;i<=n*k;i++)
cin>>a[i];
sort(a+1,a+n*k+1);//要使得速度和最大,尽量把小的都放在同一个组
for(int i=n*k;i>=n;i--)//当找到n都没找到证明不可能分成n组
{// 先找出符合要求的能力值最高的
if(a[i]-a[1]<=l){
bj=i;break;
}
}
//算出后面一部分还有多少个能力高 的学生
long long sum=n*k-bj ;// 是可以任意分配到不同的组别
for(int i=bj;i>=1;i--)//剩下的从高到低模拟分组
{
sum++;//统计剩下的人数
if(sum>=k)//剩下的人能组成一组
{
s+=a[i];//这个人肯定是这一组的能力最低
sum-=k;
}
}
if(bj==0) s=0;
cout<<s;
return 0;
}