题解 | #[USACO 2016 Jan S]Angry Cows#

[USACO 2016 Jan S]Angry Cows

https://ac.nowcoder.com/acm/problem/24017

寻找R的最小值,同样可以使用二分验证的方式去做,那么问题就落到了如果验证当前的R可以将草堆全部引爆。
如何验证:从左向右去炸第一问即可,在其中维护一个当前爆炸的最大坐标从而来判断当前这个草堆是不是需要去炸的第一个就可以了。
//寻找R的最小值,同样可以使用二分验证的方式去做,那么问题就落到了如果验证当前的R可以将草堆全部引爆。
#include <bits/stdc++.h>

using namespace std;
const int maxn = 50000+10;
int N, K;//N干草的数量,K奶牛的数量
int hay[maxn];

bool yanz(int k)
{
    int cao = K;
    int j = 0;
    int total = k*2;
    for (int i=0;i<N;i++) {
        if (hay[i]>j) {
            cao--;
            j = total+hay[i];
        };
    }
    if (cao>=0) return true;
    else return false;
}

int main() {
    int k;
    cin>>N>>K;
    for (int i=0;i<N;i++) {
        scanf("%d", &hay[i]);
    }
    sort(hay, hay+N);
    int l = 1, r = hay[N-1];
    //二分答案
    while (l<r) {
        int mid = (l+r)/2;
        if (yanz(mid)) r = mid;
        else l = mid+1;
    }
//     cout<<yanz(5)<<endl;
    cout<<l<<endl;
    return 0;
}


全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
Lorn的意义:你这标个前端是想找全栈吗?而且项目确实没什么含金量,技术栈太少了,边沉淀边找吧 现在学院本想就业好一点四年至少得高三模式两年加油吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务