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

POJ 2456 Aggressive cows

时间:2014-08-27 20:30:18      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   问题   div   

题目链接:http://poj.org/problem?id=2456

 

题目翻译:

  农夫约翰搭建了一间有N间牛舍得小屋,牛舍排在一条直线上,第i号牛舌在Xi的位置。但是他的M头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其他牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。

限制条件

2<=N<=100000

2<=M<=N

0<=Xi<=10^9

 

 

思路: <挑战程序设计竞赛>中的模板题目,是一个求最大的最小值问题。首先我们构建基本的解题框架。二分+贪心。用二分思想对距离进行枚举并判断是否符合要求,直到找到最大值。那么如何进行判断呢?我们进行排序贪心即可。

代码:

  

#include <iostream>
#include <algorithm> 
#include <cstdio> 
using namespace std;

int n,m;

int a[100001];

//判断函数
int j(int x)
{
    int c,last;
    last = 1;
    
    for(int i=1;i<m;i++)
    {        
        c = last+1;
        while(c<=n&&a[c]-a[last]<x)
        {
            c++;
        }
        
        if(c==n+1)
            return false;
        last = c;
    }
    
    return true;
}


int main()
{
    int r,l,mid;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%d",a+i);
        }
        
               //排序
        sort(a,a+n+1);
        
        l = 0;
        r = 1000000000;
        
                //二分
        while(l+1<r)
        {
            mid = (r+l)/2;
            if(j(mid)==true)
            {
                l = mid;
            }
            else
            {
                r = mid;
            }
        }
        
        printf("%d\n",l);
        
    }    
    return 0;
}      

 

POJ 2456 Aggressive cows

标签:style   blog   http   color   os   io   for   问题   div   

原文地址:http://www.cnblogs.com/ltwy/p/3940195.html

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