poj 2456 Aggressive cows (二分+贪心思想)
2016-02-16 18:13
519 查看
Description
Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000).
His C (2 <= C <= N) cows don't like this barn layout and become aggressive towards each other once put into a stall. To prevent the cows from hurting each other, FJ want to assign the cows to the stalls, such that the minimum distance between any two of them
is as large as possible. What is the largest minimum distance?
Input
* Line 1: Two space-separated integers: N and C
* Lines 2..N+1: Line i+1 contains an integer stall location, xi
Output
* Line 1: One integer: the largest minimum distance
Sample Input
Sample Output
Hint
OUTPUT DETAILS:
FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum distance of 3.
题意:
FJ 有一个很长的 barn ,里面有 N 棚, 假设N 个棚在一条直线上,第 i 个棚的位置为 xi.
然后他有 c 只羊,为了防止羊相互攻击,要找出最大的两只羊之间距离,前提是这 c 只羊都必须能放下。
解题思路:先将 xi 由小到大排序, xn 最大。设这个最大距离为 s;0=<s<=(xn-x1), 因为 c 只羊需要 c-1 个间隔。使用二分找 s 的可能取值
代码如下:
Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000).
His C (2 <= C <= N) cows don't like this barn layout and become aggressive towards each other once put into a stall. To prevent the cows from hurting each other, FJ want to assign the cows to the stalls, such that the minimum distance between any two of them
is as large as possible. What is the largest minimum distance?
Input
* Line 1: Two space-separated integers: N and C
* Lines 2..N+1: Line i+1 contains an integer stall location, xi
Output
* Line 1: One integer: the largest minimum distance
Sample Input
5 3 1 2 8 4 9
Sample Output
3
Hint
OUTPUT DETAILS:
FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum distance of 3.
题意:
FJ 有一个很长的 barn ,里面有 N 棚, 假设N 个棚在一条直线上,第 i 个棚的位置为 xi.
然后他有 c 只羊,为了防止羊相互攻击,要找出最大的两只羊之间距离,前提是这 c 只羊都必须能放下。
解题思路:先将 xi 由小到大排序, xn 最大。设这个最大距离为 s;0=<s<=(xn-x1), 因为 c 只羊需要 c-1 个间隔。使用二分找 s 的可能取值
代码如下:
#include <iostream> #include <algorithm> using namespace std; int a[100010]; int main() { int n,m; while(cin>>n>>m) { int high,low,mid; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); // 必须先排序 high=a[n-1]-a[0],low=0; //low的值必须考虑0 int left=0,right=high,cnt; for(int i=0;i<100;i++) //while(left+1<right) while和for都可 { cnt=1; mid=(left+right)/2; int temp=a[0]; for(int i=1;i<n;i++) { if((a[i]-temp)>=mid) { cnt++; temp=a[i]; } } if(cnt>=m) left=mid; else right=mid; } printf("%d\n",left); } return 0; }博客已搬:洪学林博客
相关文章推荐
- Ambari Metrics介绍
- 过年胖三斤
- xcode常用快捷键
- hive函数总结-日期函数
- Windows自带的磁盘填充命令
- 谷歌的HTML / CSS规范指南
- 使用Wireshark捕捉USB通信数据
- iOS开发之网络编程--使用NSURLConnection实现文件上传
- 【 bzoj 1444 】 [Jsoi2009]有趣的游戏 - AC自动机+矩阵乘法
- SecureCRT 常用技巧
- SwipeRefreshLayout的升级版RefreshLayout
- Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)
- 记我的工作第一天
- sql server 笔记
- 【转载】用平常语言介绍神经网络
- 设计模式之原型模式
- 一个后端的前端学习之旅——4.第一个demo上线以及关于前端框架我的看法
- javascript dom编程艺术阅读笔记
- Xcode预处理命令、控制台调试命令、 iOS事件拦截
- js 代码的优化 ,完全是照搬,不过挺好使