1. 程式人生 > >洛谷 P2909 [USACO08OPEN]牛的車Cow Cars

洛谷 P2909 [USACO08OPEN]牛的車Cow Cars

sin 避免 radi minimum mea red exp back ron

P2909 [USACO08OPEN]牛的車Cow Cars

題目描述

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的前面有南只奶牛駕車行駛,那奶牛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<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,d,L;
int l,r,mid;
int ans,pos;
int num[50010];
int judge(){
    if(num[mid]-(ans/m)*d<L)    return true;
    else return false;
}
int main(){
    scanf("%d%d%d%d",&n,&m,&d,&L);
    for(int i=1;i<=n;i++)
        scanf("%d",&num[i]);
    sort(num+1,num+1+n);
    l=1;
    while(1){
        r=n;
        while(l<=r){
            mid=(l+r)/2;
            if(judge())    l=mid+1;
            else r=mid-1;
        }
        if(l+m<n)    ans+=m,l+=m;
        else{ ans+=n-l+1;break; }
    }
    cout<<ans;
}

洛谷 P2909 [USACO08OPEN]牛的車Cow Cars