(ファイルIO):入力:cowcar.in出力:cowcar.out
制限時間:1000ミリ秒のスペースの制約:262144キロバイトの特定の制限
後藤ProblemSet
タイトル説明
高速道路上が
の番号牛、
、各牛はIで、牛の速度を自分の車を運転しています
、道路上の合計を言います
レーン
。セキュリティ上の理由から、牛の各ヘッドには、以下の原則です:そこに同じ車線の前で
スピード牛、牛が減少します
、もちろん、該当しません
以下、車速がなければなりません
。ロットからの車のようなので、さらに高速の前で車の後ろの車よりも、あなたが発生します衝突を心配する必要はありません。
高速道路上の最低速度制限があります
、車の速度よりも全て低くは今あなたが高速道路を走行するどのように多くの車の合計を計算することができ、高速では許可されません。
入力
最初に
行目:
スペースは整数を分離しました
;
の
:ライン
行は、i番目の1速牛に記載しました。
出力
ライン:整数出力高速走行牛車の最大数。
サンプル入力
。3. 1. 5 1
。5
。7
。5
サンプル出力
2
データ範囲の制限
問題解決のためのアイデア
この質問は明らかアナログ列挙暴力です。
そこで我々は、こと、高速道路上で、牛の速度はもっと言うことです以上の減衰によって、前面に、大きなスピード背中に小さなの速度が有利になった後、タイトルから知っています最初の注文。
このトラックは、この車を手放すことができれば列挙車とトラック、それが追跡し、ポインタをレースします
。ない場合は、それが車に置き換えられます。トラックが収まらない場合でも、その後、トラックレースの現在の数が背後にあるこのレーストラックでもあるので、この1トラックに適合しない、当時確かに実際には、車をしようとするもの、理解するために(収まらない二分スピードウェイ)。次の出力
缶。
コード
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,d,l,k,ans,a[50010],b[50010];
string s;
int main(){
freopen("cowcar.in","r",stdin);
freopen("cowcar.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&d,&l);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
int i=1,j=1;
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;
}
}
printf("%d",ans);
}