答案
#include<iostream>
#include<algorithm>
using namespace std;
const int N=510;
const int M=110;
const int inf=1000000000;
int t[N],nt[N];
int f[100210],cnt[100210];
int main()
{
int res,n,m,s,d,i,j;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>t[i];
}
sort(t+1,t+n+1);
nt[0]=0;
nt[1]=m;
for(i=2;i<=n;i++)
{
if(t[i]-t[i-1]>2*m)
{
nt[i]=nt[i-1]+2*m;
}
else
{
nt[i]=nt[i-1]+t[i]-t[i-1];
}
}
for(i=1;i<=n;i++)
{
cnt[nt[i]]++;
}
for(i=nt[n]-1;i>=0;i--)
{
f[i]=inf;
s=d=0;
for(j=1;j<2*m;j++)
{
d+=s;
if(j>=m&&d+f[i+j]<f[i])
{
f[i]=d+f[i+j];
}
s+=cnt[i+j];
}
}
cout<<f[0]<<endl;
return 0;
}