BZOJ 1623: [Usaco2008 Open]Cow Cars 奶牛飛車

1623: [Usaco2008 Open]Cow Cars 奶牛飛車

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 565  Solved: 392
[Submit][Status][Discuss]

Description

  編號爲1到N的N只奶牛正各自駕着車打算在牛德比亞的高速公路上飛馳.高速公路有M(1≤M≤N)條車道.奶牛i有一個自己的車速上限Si(l≤Si≤1,000,000).
    在經歷過糟糕的駕駛事故之後,奶牛們變得十分小心,避免碰撞的發生.每條車道上,如果某一隻奶牛i的前面有K只奶牛駕車行駛,那奶牛i的速度上限就會下降K*D個單位,也就是說,她的速度不會超過Si - kD(O≤D≤5000),當然如果這個數是負的,那她的速度將是0.牛德比亞的高速會路法規定,在高速公路上行駛的車輛時速不得低於/(1≤L≤1,000,000).那麼,請你計算有多少奶牛可以在高速公路上行駛呢?

Input

第1行輸入N,M,D,L四個整數,之後N行每行一個整數輸入Si.
N<=50000

Output

 
    輸出最多有多少奶牛可以在高速公路上行駛.

Sample Input

3 1 1 5//三頭牛開車過一個通道.當一個牛進入通道時,它的速度V會變成V-D*X(X代表在它前面有多少牛),它減速後,速度不能小於L
5
7
5

INPUT DETAILS:

There are three cows with one lane to drive on, a speed decrease
of 1, and a minimum speed limit of 5.

Sample Output

2

OUTPUT DETAILS:

Two cows are possible, by putting either cow with speed 5 first and the cow
with speed 7 second.


題解:水題,沒得講,先排序,然後貪心。


代碼:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int v[50005];
int n,m,d,l,ans,k;
int main()
{
	n=read();m=read();d=read();l=read();
	for(int i=1;i<=n;i++)
		v[i]=read();
	sort(v+1,v+n+1);
	for(int i=1;i<=n;i++)
	{
		k=ans/m;
		if(v[i]-k*d>=l)ans++;
	}
	printf("%d",ans);
	return 0;
}


發佈了49 篇原創文章 · 獲贊 11 · 訪問量 7386
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章