20200314 jzoj 牛车(cowcar)

题目描述
高速公路上有N(1<=N<=50,000)只奶牛,编号为1…N,每头牛都开着自己的车,第i头牛的车速为S_i(1<=S_i<=1,000,000)km/h,告诉公路上一共有M个车道(1<=M<=N)。为了安全起见,每头牛都遵循以下原则:同车道前面有x头牛,牛的车速就会降低DX(0<=D<=5,000)KM/h,当然不会降到0以下,所以车速应该max(S_i-DX,0)。由于车距很大,所以即使后面的车比前面的车快,你也不用担心会发生碰撞。
高速公路上有一个最低限速L(1<=L<=1,000,000),凡是低于该速度的车不允许上高速,现在请你来计算一共可以多少辆车在高速公路上行驶。

输入
第1行:4个空格隔开的整数N,M,D,L;
第2…N+1行: 第i+1行描述第i头牛的起初车速。

样例输入
3 1 1 5
5
7
5

输出
一行:输出一个整数表示最多可以在高速上行驶的牛车数量。

样例输出
2

题解这题,排序+暴力。。。

what?? 咋又是暴力???

滑稽君要出来了


首先我们知道每辆车的速度,以及最低速度,我们稍微想想就能知道越往后,速度就减少的越大。
本题求的是最多可以有多少辆车能在高速上行驶,那么,我们将速度慢点放前面肯定是比将速度快的放前面能行驶的要多
代码如下:

var
   a,b:array[0..51000]of longint;
   i,j,k,n,m,d,l,ans:longint;
procedure dg(l,r:longint);
var
   i,j,mid,t:longint;
begin
    if(l>=r) then exit;
    i:=l;
    j:=r;
    mid:=a[(l+r) div 2];
    while(i<=j) do
    begin
        while(a[i]<mid) do inc(i);
        while(a[j]>mid) do dec(j);
        if(i<=j) then
        begin
            t:=a[i];
            a[i]:=a[j];
            a[j]:=t;
            inc(i);
            dec(j);
        end;
    end;
    dg(i,r);
    dg(l,j);
end;
begin
assign(input,'cowcar.in');reset(input);
assign(output,'cowcar.out');rewrite(output);
    read(n,m,d,l);
    ans:=0;
    for i:=1 to n do
    read(a[i]);
    dg(1,n);
    for i:=1 to n do
     for j:=1 to m do
     begin
         if(a[i]-d*b[j]>=l)then
         begin
             inc(b[j]);
             ans:=ans+1;
             break;
         end;
     end;
     write(ans);
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值