USACO 2016 Jan Silver 愤怒的奶牛(Angry Cows)

原题目 数据 正解

【题目描述】
奶牛Bessie设计了一个游戏:“愤怒的奶牛”。游戏的原型是:有一些可爆炸的草堆分布在一条数轴的某些坐标上,玩家用弹弓把一头奶牛发射到数轴上。奶牛砸到数轴上的冲击波会引发附近的草堆爆炸。游戏的目标是玩家用一些奶牛炸掉所有的草堆。
N 个草堆在数轴的不同位置,坐标为x1,x2,.,xn。如果玩家以能量R把奶牛发射到坐标 x ,就会引爆半径R及以内的的草堆,即坐标范围 [xR,x+R] 的草堆都会燃爆。
现在有 K 头奶牛,每头奶牛的能量都是R,请计算如果要引爆所有的草堆,最小的 R 是多少?
【输入格式】
第一行:2个整数N(1N50,000) K(1K10)
下面有N行,每行一个整数: x1,x2,,xn ,范围在 [01,000,000,000]
【输出格式】
输出最小可能的 R <script type="math/tex" id="MathJax-Element-52">R</script>。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int N, K;
    cin>>N>>K;
    int loc[N+2];
    for (int i=0; i<N; i++)
        cin>>loc[i];
    sort(loc, loc+N);
    int llim = 0;
    int rlim = (loc[N-1] - loc[0] + 1) / K + 1;
    while (llim+1 < rlim) {
        int mid = (llim+rlim) >> 1;
        int used = 0;
        int lp = 0;
        while(lp < N) {
            used++;
            int curr = lp+1;
            for (; curr < N && loc[curr] - loc[lp] <= 2*mid; curr++);
            lp = curr;
        }
        if (used <= K)
            rlim = mid;
        else
            llim = mid;
    }
    cout<<rlim<<endl;
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值