poj2456
来源:互联网 发布:云计算和大数据哪个好 编辑:程序博客网 时间:2024/06/05 05:56
#include <iostream>
#include <stdio.h>
#include <algorithm>
long long a[100005],n,c;
using namespace std;
bool judge(long long d)
{
int f,r,t=1;
f=r=1;
while (r<n)
{
while (a[r]-a[f]<d&&r<n) r++;
if (a[r]-a[f]>=d) t++;
f=r;
}
if (t>=c) return true;else return false;
}
int main()
{ long long left,right,mid;
freopen("in.txt","r",stdin);
cin>>n>>c;
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
sort(a+1,a+n+1);
left=1;right=a[n]/c;
while (right-left>1) /*最后left,right挨在一起*/
{
mid=(left+right)/2;
if (judge(mid)) left=mid;
else right=mid;
}
if (judge(right))cout<<right;else cout<<left;/*对剩下两个分别判断*/
return 0;
}
题目大意:最大化最小值
FJ 有一个很长的 barn ,然后里面有 N 棚, N 个棚在一条直线上,第 i 个棚的位置为 xi.
然后他有 c 只羊,为了防止羊相互攻击,则要找出最大的两只羊之间距离,前提是这 c 只羊都必须能放下哈。
解题思路:先将 xi 由小到大排序, xn 最大。设这个最大距离为 s;0<s<=(xn-x1)/(c-1), 因为 c 只羊需要 c-1 个间隔。使用二分找 s 的可能取值,然后用贪心看是否成立。
Left=0;
right=(xn-x1)/(c-1);
mid=(left+right)/2; 如果间隔 mid 能够放下 c 只羊,则最大间隔在 [mid,right] ;
否则 [left,mid-1]. 继续寻找。
- poj2456
- poj2456
- poj2456
- poj2456
- POJ2456
- POJ2456
- POJ2456
- POJ2456 二分
- POJ2456 二分
- POJ2456【二分】
- poj2456(二分)
- poj2456二分法
- poj2456(贪心+二分)
- POJ2456 Aggressive cows
- POJ2456 Aggressive cows
- POJ2456 Aggressive cows (二分)
- poj2456 二分搜索
- poj2456(二分搜索)
- rttymuytnh
- QEMU中的IOCTL
- u9897
- 如何把本地写好的一个工程上传到Github?
- 基于OpenCV的图像形态学处理
- poj2456
- dgrid的store设置
- Activity四种启动模式
- uiyiyooy
- ORACLE 邮件发送
- 【leetcode】Construct Binary Tree from Inorder and Postorder Traversal
- cocos2dx实现手指控制物体移动
- 2015超实用的前端开发指南
- 操作系统虚拟化原理总结篇——VMCS详解