模拟
从题中我们可以知道,在高速公路上,越靠后的牛速度速度减得越多,也就是说,将速度小的放在前面,而将速度大的放在后面是更好的,因此,可以先排序。
模拟赛车和赛道,如果这个赛道能放得下这个赛车的话,就将赛道和赛车指针都
+
1
+1
+1.如果不能,就换下一辆赛车。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,d,l,k,ans,i=1,j=1;
int a[50010],b[50010];
int main()
{
freopen("cowcar.in","r",stdin);
freopen("cowcar.out","w",stdout);
cin>>n>>m>>d>>l;
for(int i=1; i<=n; i++)
cin>>a[i];
sort(a+1,a+1+n);
while(1)
{
k=a[i]-b[j]*d;
if(k>=l)
{
ans++,b[j]++;
j++,i++; //指针指向
if(j>m)
j=1;
if(i>n)
break;
}
else
{
i++;
if(i>n)
break;
}
}
cout<<ans;
return 0;
}