P2909 [USACO08OPEN]牛的车Cow Cars

https://www.luogu.com.cn/problem/P2909
题目描述
N (1 <= N <= 50,000) cows conveniently numbered 1…N are driving in separate cars along a highway in Cowtopia. Cow i can drive in any of M different high lanes (1 <= M <= N) and can travel at a maximum speed of S_i (1 <= S_i <= 1,000,000) km/hour.

After their other bad driving experience, the cows hate collisions and take extraordinary measures to avoid them. On this highway, cow i reduces its speed by D (0 <= D <= 5,000) km/hour for each cow in front of it on the highway (though never below 0 km/hour). Thus, if there are K cows in front of cow i, the cow will travel at a speed of max[S_i - D * K, 0]. While a cow might actually travel faster than a cow directly in front of it, the cows are spaced far enough apart so crashes will not occur once cows slow down as

described,

Cowtopia has a minimum speed law which requires everyone on the highway to travel at a a minimum speed of L (1 <= L <= 1,000,000) km/hour so sometimes some of the cows will be unable to take the highway if they follow the rules above. Write a program that will find the maximum number of cows that can drive on the highway while obeying the minimum speed limit law.

编号为1到N的N只奶牛正各自驾着车打算在牛德比亚的高速公路上飞驰.高速公路有M(1≤M≤N)条车道.奶牛i有一个自己的车速上限Si(l≤Si≤1,000,000).

在经历过糟糕的驾驶事故之后,奶牛们变得十分小心,避免碰撞的发生.每条车道上,如果某一只奶牛i的前面有k只奶牛驾车行驶,那奶牛i的速度上限就会下降kD个单位,也就是说,她的速度不会超过Si – kD(O≤D≤5000),当然如果这个数是负的,那她的速度将是0.牛德比亚的高速会路法规定,在高速公路上行驶的车辆时速不得低于/(1≤L≤1,000,000).那么,请你计算有多少奶牛可以在高速公路上行驶呢?

输入格式

  • Line 1: Four space-separated integers: N, M, D, and L

  • Lines 2…N+1: Line i+1 describes cow i’s initial speed with a single integer: S_i

输出格式

  • Line 1: A single integer representing the maximum number of cows that can use the highway

输入输出样例
输入 #1 复制
3 1 1 5
5
7
5
输出 #1 复制
2
说明/提示
There are three cows with one lane to drive on, a speed decrease of 1, and a minimum speed limit of 5.

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

#include<bits/stdc++.h>
using namespace std;
#define P 50005
long long N, M, D, L, cnt;//n:奶牛 M:车道 D:下降车速单位 L:车速最低速
int a[P];
int main(){
	cin >> N >> M >> D >> L;
	for(int i=1; i<=N; i++)
		cin >> a[i];
	sort(a+1, a+N+1);//将N头牛的车速从小到大排序 
	for(int i=1; i<=N; i++){
		if(a[i] < L)
			continue;
		int t = cnt / M;//每个车道上已有的奶牛数量 
		if(a[i] - t*D >= L)//与前面奶牛不相撞的情况下,满足最低速即可 
			++cnt;
	}
	cout << cnt;
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值