码迷,mamicode.com
首页 > 其他好文 > 详细

【POJ】2456Aggressive cows

时间:2018-05-12 21:40:00      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:turn   for   span   printf   space   col   mes   二分   div   

http://poj.org/problem?id=2456

思路:这是一个最小值最大化的问题。先对隔间编号从小到大排序,则最大距离不会超过两端的两头牛之间的差值,最小值为0。所以我们可以通过二分枚举最小值来求。假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛,就先让x变大再判断;如果放不下,说明当前的x太大了,就先让x变小然后再进行判断。直到求出一个最大的x就是最终的答案。

#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 100005;
int a[N], n, c;

bool judge(int x)
{
    int cnt = 1, tmp = a[0];
    for(int i = 1; i < n; i++)
    {
        if(a[i] - tmp >= x)
        {
            cnt++;
            tmp = a[i];
            if(cnt >= c) //可以放下C头牛
                return true;
        }
    }
    return false;
}

int get_ans() //二分搜索最小值
{
    int l = 0, r = a[n-1] - a[0];
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(judge(mid))
            l = mid + 1;
        else
            r = mid - 1;
    }
    return l - 1;
}

int main()
{
    while(~scanf("%d%d",&n,&c))
    {
        for(int i = 0; i < n; i++)
            scanf("%d",&a[i]);
        sort(a, a+n);
        printf("%d\n",get_ans());
    }
    return 0;
}

 

【POJ】2456Aggressive cows

标签:turn   for   span   printf   space   col   mes   二分   div   

原文地址:https://www.cnblogs.com/Kohinur/p/9029936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!