alice132

 

2025.12.13 作业 - # P2909 [USACO08OPEN] Cow Cars S

题目描述

在 Cowtopia 的高速公路上,有 \(N\) 头奶牛(\(1 \leq N \leq 50,000\)),它们被方便地编号为 \(1..N\),分别驾驶着不同的汽车。奶牛 \(i\) 可以在 \(M\) 条不同的高速车道上行驶(\(1 \leq M \leq N\)),并且可以以最大速度 \(S_i\)\(1 \leq S_i \leq 1,000,000\))公里/小时行驶。

在经历了其他糟糕的驾驶体验后,奶牛们讨厌碰撞,并采取了极端措施来避免它们。在这条高速公路上,奶牛 \(i\) 会因为在它前面的每一头奶牛而将速度减少 \(D\)\(0 \leq D \leq 5,000\))公里/小时(但速度不会低于 0 公里/小时)。因此,如果在奶牛 \(i\) 前面有 \(K\) 头奶牛,那么它将以 \(\max[S_i - D \times K, 0]\) 的速度行驶。虽然奶牛实际上可能比直接在它前面的奶牛行驶得更快,但奶牛之间的间距足够大,因此一旦奶牛减速,就不会发生碰撞。

Cowtopia 有一条最低速度法则,要求高速公路上的所有车辆都必须以最低速度 \(L\)\(1 \leq L \leq 1,000,000\))公里/小时行驶,因此有时一些奶牛在遵循上述规则时将无法上高速公路。编写一个程序,找出在遵守最低速度限制法的情况下,能够在高速公路上行驶的最大奶牛数量。

输入格式

* 第 1 行:四个以空格分隔的整数:\(N\)\(M\)\(D\)\(L\)

* 第 2 行到第 \(N+1\) 行:第 \(i+1\) 行用一个整数描述奶牛 \(i\) 的初始速度:\(S_i\)

输出格式

* 第 1 行:一个整数,表示可以使用高速公路的最大奶牛数量

输入输出样例 #1

输入 #1

3 1 1 5 
5 
7 
5 

输出 #1

2 

说明/提示

有三头奶牛,只有一条车道可供行驶,速度减少为 1,最低速度限制为 5。
可以让两头奶牛上高速公路,方法是先让速度为 5 的奶牛上路,然后让速度为 7 的奶牛上路。

#include<bits/stdc++.h>
using namespace std;
int n,m,d,L,s[50002];

int main() {
    cin>>n>>m>>d>>L;
    for (int i=1;i<=n;i++) cin>>s[i];
    sort(s+1,s+1+n);
    int k=1,cnt=0,Ans=0;
    for (int i=1;i<=n;i++) {
        if (s[i]-cnt*d>=L) {
            Ans++,k++;
            if (k>m) k=1,cnt++;
        }
    }
    cout<<Ans<<endl;
    return 0;
}

posted on 2026-01-28 22:21  alice_ss  阅读(3)  评论(0)    收藏  举报

导航