タイトルの説明
高速道路にはN(1 <= N <= 50,000)の牛があり、1 ... Nの番号が付けられています。各牛は自分の車を運転し、i番目の牛の速度はS_i(1 <= S_i <= 1,000,000)です。 km / h、高速道路にM車線があることを伝えます(1 <= M <= N)。安全のために、各牛は次の原則に従います。同じレーンの前にx頭の牛がいる場合、牛の速度はD X(0 <= D <= 5,000)KM / h減少します。もちろん、0未満には下がりません。車両速度は最大でなければなりません(S_i-D X、0)。車間距離が広いので、後ろの車が前の車より速い場合でも、衝突を心配する必要はありません。
高速道路には最低速度L(1 <= L <= 1,000,000)があります。この速度を下回る車は高速道路に進入できません。次に、高速道路を走行できる車両の数を計算してください。
入力
1行目:4つのスペースで区切られた整数N、M、D、L;
行2 ... N + 1:行i + 1は、i番目の牛の初速度を示します。
アウトプット
1行:高速で運転できる去勢牛カートの最大数を示す整数を出力します。
入力例
3 1 1 5
5
7
5
出力例
2
分析
実際、ダブルループして、すべての車とすべてのレーンを列挙して、貪欲にすることができます。
コードオン
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,d,l,s[50001],a[50001],ans,s1,t;
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>>s[i];
}
sort(s,s+n+1);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
t=s[i]-(a[j]*d);//c[j]为第j条车道上牛的数量
s1=max(t,0);//速度不小于0
if(s1>=l)//如果速度满足条件就进行统计
{
a[j]++;
ans++;
break;
}
}
}
cout<<ans;
fclose(stdin);
fclose(stdout);
return 0;
}