描述

农夫 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. SpringBoot:阿里数据源配置、JPA显示sql语句、格式化JPA查询的sql语句

    1 数据源和JPA配置 1.1 显示sql配置和格式化sql配置 者两个配置都是属于hibernate的配置,但是springdatajpa给我们简化了:所有hibernate的配置都在jpa下面的p ...

  2. 重命名Docker容器

    重命名Docker容器: Docker rename [Old container name]  [New container name]

  3. Django框架 之 跨域请求伪造

    Django框架 之 跨域请求伪造 浏览目录 同源策略与Jsonp 同源策略 Jsonp jQuery对JSONP的实现 CORS 简介 两种请求 同源策略与Jsonp 同源策略 同源策略(Same ...

  4. 高级软件测试技术(测试管理工具实践day4)

    今天是截止日期,有胡俊辉的指导下小组成员都了解使用了Bugzilla的基本使用.大家都在晚上之前把各自的文档汇总给汪鸿,由他撰写了操作手册.并且在下午杨瑞丰完成了视频的录制工作.但是在转化为MP4 格 ...

  5. h5存储的优点

    1.解决4k大小问题2.解决请求头常带存储信息的问题3.解决关系型存储问题4.可以跨浏览器

  6. rest 参数和扩展运算符

    rest 参数和扩展运算符 rest 参数的形式为 ...变量名:扩展运算符是三个点 .... rest 参数 function add(...values) { console.log(values ...

  7. mysql 全文搜索 FULLTEXT

    到 3.23.23 时,MySQL 开始支持全文索引和搜索.全文索引在 MySQL 中是一个 FULLTEXT 类型索引.FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE ...

  8. .NET架构转Java开发必须了解的历史

    终于不在职守在.NET领域 .NET的winform和webform项目也开发了很多了  尤其是WEB领域 从ASP -> ASP.NET 2.0 -> ASP.NET MVC 4.0 - ...

  9. SQLServer备份恢复助手(太强大了!)

    下载地址: http://download.csdn.net/detail/gguozhenqian/8105779

  10. 以太坊系列之十三: evm指令集

    evm指令集手册 Opcodes 结果列为"-"表示没有运算结果(不会在栈上产生值),为"*"是特殊情况,其他都表示运算产生唯一值,并放在栈顶. mem[a.. ...