zoukankan      html  css  js  c++  java
  • Aggressive cows [二分]

    Describe

    有一个神奇的盒子,它有N (2 <= N <= 1e5)个空间,这些空间依次编号为a1,…,aN (0 <= ai <= 1e9). 有x (2 <= x <= N)巧克力,如果多个巧克力放在一个空间就会爆炸。为了不让巧克力爆炸。我们需要使任意两个巧克力之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?

    Input

    有多组测试数据,以EOF结束。 第一行:空格分隔的两个整数N和C 第二行——第N+1行:分别指出了ai的位置

    Output

    每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。

    Sample Input

    5 3
    1
    2
    8
    4
    9

    Sample Output

    3

    Hint

    1位置放一个巧克力,4位置放一个巧克力,它们的差值为3;最后一个巧克力放在8或9位置都可以,和4位置的差值分别为4、5,和1位置的差值分别为7和8,不比3小,所以最大的最小值为3。
    思路:裸的二分,没啥可说

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 1e5+5;
    
    int v[maxn];
    int n,m;
    
    bool judge(int length) {
        int s = 0,pos = v[1];
        for (int i = 1;i<=n;i++) {
            if(v[i] - pos >= length) {
                s++; pos = v[i];
            }
        }
        if ( s >= m-1 ) return true;
        else return false;
    }
    
    int main() {
        while(~scanf("%d %d",&n,&m)){
            for (int i = 1;i<=n;i++) scanf("%d",&v[i]);
            sort(v+1,v+n+1);
            int l = v[1],r = v[n],mid;
            while ( l <= r ) {
                mid = (l+r)>>1;
                if ( judge(mid) ) {
                    l = mid+1;
                } else {
                    r = mid-1;
                }
            }
            printf("%d
    ",l-1);
        }
        return 0;
    }
  • 相关阅读:
    python 获取字典值
    EF 预热
    多线程实战(三)线程池
    多线程实战(二)线程同步
    C#并行编程 (Barrier,CountdownEvent,ManualResetEventSlim,SemaphoreSlim,SpinLock,SpinWait )
    多线程实战(一) 线程基础
    构建千万级web访问架构
    程序员创业,远离管理软件
    两棵树,你砍哪一棵?
    NopCommerce Html扩展方法Html.Widget
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11745956.html
Copyright © 2011-2022 走看看