zoukankan      html  css  js  c++  java
  • POJ 2456

    题意

    n间屋,m头牛,使得牛跟牛之间的距离最远,防止牛打架

    思路

    类似的最大化最小值或者最小化最大值的问题,通常用二分搜索法就可以很好地解决。
    solve(d): 可以安排牛的位置使得最近的两头牛距离不小于d
    那么问题就变成了求满足solve(d)的最大的d
    另外, 最近的间距不小于d也可以说是所有牛的间距都不小于d
    solve(d): 可以安排牛的位置使得任意的牛的间距都不小于d

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    const int INF = 0x3f3f3f3f;
    const int maxn = 1e5+5;
    int s[maxn];
    int n, k;
    
    bool judge(int d){
        int a, b;
        b = 0;
        for(int i = 1; i < k; i++ ){
            a = b + 1;
            while( a < n && s[a] - s[b] < d )
                a++;
            if( a == n ) return false;
            b = a;
        }
        return true;
    }
    
    int main()
    {
        scanf("%d%d", &n, &k);
        for(int i = 0; i < n; i++)
            scanf("%d",&s[i]);
        sort(s, s+n);
        int lb = 0, ub = INF;
        int mid;
        while(ub-lb>1){
            mid = (lb+ub)/2;
            if( judge(mid) ) lb = mid;
            else ub = mid;
        }
        printf("%d
    ", lb);
        return 0;
    }
  • 相关阅读:
    windows平台下一款强大的免费代理获取工具
    彻底搞懂Git Rebase
    line-height
    text-indent
    text-decoration
    text-align
    color
    CSS属性汇总
    font
    font-style
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740529.html
Copyright © 2011-2022 走看看