惨不忍睹(O2)
#include<bits/stdc++.h>
using namespace std;
int i,j,n,m,stu[505],dp[105],in_bus,cnt;
int wait_time(int t)
{
cnt=0;
int i,sum=0;
for(i=t+1;i<n;i++)
if(stu[i]<stu[t]+m)
sum+=(stu[t]+m)-stu[i],cnt++;
else
break;
return sum;
}
int main(){
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&stu[i]);
sort(stu,stu+n);
in_bus=1,dp[0]=0;
for(i=1;i<n;i++)
{
if(in_bus*(stu[i]-stu[i-1])<wait_time(i-1))
dp[i]=in_bus*(stu[i]-stu[i-1])+dp[i-1],in_bus++;
else
dp[i]=wait_time(i-1)+dp[i-1],in_bus=max(1,cnt);
}
printf("%d",dp[n-1]);
return 0;
}