描述

农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000).
但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?

 
输入
第一行:空格分隔的两个整数N和C
第二行——第N+1行:分别指出了xi的位置
输出
每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。
样例输入
5 3
1
2
8
4
9
样例输出
3

意要表达的是:把C头牛放到N个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。

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

现在来搞下解题步骤:

C(d)=可以安排牛的位置使得最近的两头牛的距离都不小于d

那么现在问题就变成求满足C(d) 的最大d,另外最近的间距不小于d也可以说成是所有牛的间距不小于d;

在问题上的判断使用贪心法便可以非常容易地求解。

1.对牛舍的位置x进行排序

2.把第一头牛放入x0的牛舍

3.如果第i头牛放入了xj的话,第i+1头牛就要放入满足xj+d<=xk 的最小的xk中

AC 代码:

#include<stdio.h>
#include<algorithm>
#define MAX 101000
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int a[MAX];
bool C(int d)
{
int last=;
for(int i = ; i < m ; i++)
{
int crt=last+;
while(crt<n&&a[crt]-a[last]<d)///只需要比较k-1次找出最适合的值d来搞k头牛,用last&crt来表示上一头牛和当前牛的位置
crt++;
if(crt==n)
return false;///到达最大值n。说明d的值小了
last = crt;
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = ; i < n ; i++)
scanf("%d",&a[i]);
sort(a,a+n);
int st = ,en=INF,mid;
while(en-st>)
{
mid=(en+st)/;
if(C(mid)==false)
en=mid;
else
st=mid;
}
printf("%d\n",(en+st)/);///个人突杨想到的问题,因为我不知道是en还是st
}

另一种解法:

#include<stdio.h>
#include<algorithm>
#define MAX 101000
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int a[MAX];
bool C(int d)
{
int sum=;
int ans=;
for(int i=;i<n;i++)
{
if((sum+a[i]-a[i-])<d)
{
sum+=a[i]-a[i-]; }
else
{
sum=;
ans++;
}
}
if(ans>=m)
return true;
return false;
}
int main()
{
int en=-,st=INF;
scanf("%d%d",&n,&m);
for(int i = ; i < n ; i++)
{
scanf("%d",&a[i]);
} sort(a,a+n);
en=a[n-]-a[];
for(int i=;i<n;i++)
{
st=min(st,a[i]-a[i-]); }
while(en-st>)
{
int mid=(en+st)/;
if(C(mid))
st=mid;
else
en=mid;
}
printf("%d\n",(st+en)/);///个人突杨想到的问题,因为我不知道是en还是st
}

POJ:2456 Aggressive cows(z最大化最小值)的更多相关文章

  1. POJ - 2456 Aggressive cows 二分 最大化最小值

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18099   Accepted: 8619 ...

  2. poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分

    poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...

  3. 二分搜索 POJ 2456 Aggressive cows

    题目传送门 /* 二分搜索:搜索安排最近牛的距离不小于d */ #include <cstdio> #include <algorithm> #include <cmat ...

  4. POJ 2456 Aggressive cows (二分 基础)

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 D ...

  5. POJ 2456 Aggressive cows (二分)

    题目传送门 POJ 2456 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) s ...

  6. POJ 2456 Aggressive cows

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11192   Accepted: 5492 ...

  7. [POJ] 2456 Aggressive cows (二分查找)

    题目地址:http://poj.org/problem?id=2456 最大化最小值问题.二分牛之间的间距,然后验证. #include<cstdio> #include<iostr ...

  8. POJ 2456 Aggressive cows ( 二分搜索)

    题目链接 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The ...

  9. POJ 2456 Aggressive cows(贪心 + 二分)

    原题链接:Aggressive cows 题目大意:农夫 建造了一座很长的畜栏,它包括  个隔间,这些小隔间依次编号为. 但是, 的  头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争 ...

随机推荐

  1. Virtual Machine Definition File 2.2

    Virtual Machine Definition File 2.2 http://archives.opennebula.org/documentation:archives:rel2.2:tem ...

  2. 设置MongoDB课程环境

    Setting Up Your Course Environment This course is designed to be very hands on. Virtually all of the ...

  3. Luogu 4155 [SCOI2015]国旗计划

    BZOJ 4444 倍增 + 贪心. 发现是一个环,先按照套路把环断开复制一倍,这样子的话覆盖完整个环就相当于覆盖一条长度不小于$m$的链,注意这样子有一些区间在新的这条链上会出现两次. 我们为了找到 ...

  4. 解决selenium与firefox版本不兼容问题

    Python环境下类比 个人使用 32位环境 Python 2.7.12 Selenium 2.53.6 Firefox 47.01 安装selenium可用pip选择对应版本,参考另一教程. 因为在 ...

  5. jq遍历table表demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. readfile()

    readfile()将一个文件写入到输出缓存参数1:文件名

  7. Python3 BeautifulSoup和Pyquery解析库随笔

    BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...

  8. Celery笔记

    异步任务神器 Celery 简明笔记 2016/12/19 · 工具与框架 · Celery, 异步 原文出处: FunHacks    在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避 ...

  9. TP5图片上传

    /*图片上传*/ public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('file'); // 移 ...

  10. (转)第一次发博客-说说我的B/S开发框架(asp.net mvc + web api + easyui)

    原文地址:http://www.cnblogs.com/xqin/archive/2013/05/29/3105291.html 前言 这些年一直在.net下做企业web系统开发,前前后后经历的不同的 ...