zoukankan      html  css  js  c++  java
  • POJ 2456 Agressive cows(二分)

    POJ 2456 Agressive cows

    农夫 John 建造了一座很长的畜栏,它包括N (2≤N≤100,000)个隔间,这 些小隔间的位置为x0,...,xN-1 (0≤xi≤1,000,000,000,均为整数,各不相同).

    John的C (2≤C≤N)头牛每头分到一个隔间。牛都希望互相离得远点省得 互相打扰。怎样才能使任意两头牛之间的最小距离尽可能的大,这个最 大的最小距离是多少呢

    思想:二分,首先把输入的数据进行从小到大排序,再由最短距离为1,最长距离为(a[n-1] - a[0] + 1 - c) / (c - 1) + 1进行二分测试即可

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define N 100000+5
    int a[N];
    int main() {
        int n, c;
        scanf("%d%d", &n, &c);
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        sort(a, a+n);
          int L = 1, R = (a[n-1] - a[0] + 1 - c)/(c-1) + 1;
          int mid, ans;
          while(L <= R) {
              mid = L + (R - L)/2;
              int i = 1, count = 1, pre = 0;
            while(i < n && count < c) {
                while(i < n && a[i] - a[pre] < mid) i++;
                if(i < n) count++;
                pre = i;
                i++;
            }
            if(count < c) {
                R = mid - 1;        
            } else {
                ans = mid;    
                L = mid + 1;
            }    
        }
        printf("%d
    ", ans);
        return 0;
    }
    作者:kindleheart
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    数据库常用术语
    灾备模式的基本体系架构
    linux下的c++开发
    视图矩阵的推导-opengl应用
    抓包实例
    以软件推动工业进步 -嵌入式学习网站
    web 前端 转盘界面
    web 汇率
    xml
    高性能网站架构设计之缓存篇(4)- 主从复制
  • 原文地址:https://www.cnblogs.com/kindleheart/p/9408663.html
Copyright © 2011-2022 走看看