题目1:分班
5478. 分班 - AcWing题库
解题
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int n,k,l;
int a[N];
int main()
{
scanf("%d%d%d",&n,&k,&l);
int m=n*k;
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
sort(a+1,a+1+m);
long long res=0;
if(a[n]>a[1]+l)
{
printf("0");
return 0;
}
else
{
int i=n;
while(a[i+1]<=a[1]+l&&i<=m) i++;
int right=m-i;
for(int j=1;j<=n;j++)
{
int can=min(right,k-1);
right-=can;
int left=k-can;
i-=left;
res+=a[i+1];
}
printf("%lld",res);
}
}