NYOJ 586 疯牛 (二分搜索答案)
来源:互联网 发布:贪吃蛇大战下载软件 编辑:程序博客网 时间:2024/05/22 06:53
疯牛
时间限制:1000 ms | 内存限制:65535 KB
难度:4
- 描述
- 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000).
但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?- 输入
- 有多组测试数据,以EOF结束。
第一行:空格分隔的两个整数N和C
第二行——第N+1行:分别指出了xi的位置 - 输出
- 每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。
- 样例输入
5 312849
- 样例输出
3
题意:给出n个x轴上的坐标,选取c个坐标,使得这c个坐标中任意相邻两个坐标间的最小值最大化。
思路:最大化最小值,看到这个一般就是二分的题目,在[0, max]之间二分搜索答案即可。
代码如下:
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int n, c;int a[100005];bool check(int x){//判断让x为最小距离是否可行 int cnt = 0, now;for(int i = 1; i <= n; i++){if(i == 1){cnt++;now = a[i];}else if(a[i] - now >= x){cnt++;now = a[i];}}if(cnt >= c)return true;return false;}int binarySearch(){//二分搜索 int l = 0, r = a[n], mid;while(l + 1 < r){mid = (r - l) / 2 + l;if(check(mid))l = mid;else r = mid;}return l;}int main(){while(scanf("%d%d", &n ,&c) != EOF){for(int i = 1; i <= n; i++){scanf("%d", &a[i]);}sort(a + 1, a + n + 1);//二分搜索之前先排序 cout<<binarySearch()<<endl;}return 0;}
0 0
- NYOJ 586 疯牛 (二分搜索答案)
- NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)
- nyoj 疯牛(二分搜索+贪心)
- 二分(二分答案、二分搜索)与单调性
- NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)(最大化最小值)
- 【贪心专题】POJ 2456 Aggressive cows && NYOJ 586 疯牛(最大化最小值 贪心+二分搜索)
- NYOJ 5177 疯牛(最大化最小值 二分搜索)
- nyoj 306 搜索+二分
- NYOJ 586-疯牛(二分)
- nyoj 586 疯牛(二分+贪心)
- nyoj--586--疯牛(二分&&枚举)
- NYOJ 586 疯牛(贪心+二分)
- 2017-07-08:考试(二分答案+斜率+搜索)
- 简单搜索入门(二):二分答案 HDU 5248
- nyoj 疯牛(二分+贪心)
- NYOJ 914 Yougth的最大化(二分搜索 + 贪心)
- NYOJ 680 摘枇杷(二分搜索+贪心)
- nyoj 914 Yougth的最大化(贪心+二分搜索)
- pyqt5 QMessageBox小结
- 242. Valid Anagram(C++)
- Spring 整合数据访问技术
- 搭建gtest测试环境 脚本
- ORA-00911 无效字符
- NYOJ 586 疯牛 (二分搜索答案)
- unity3d和建模关系
- Pandas 文本数据方法 repeat( )
- 平时笔记
- MQTT之QoS和流程
- Linux_ expect的简单用法
- apache和nginx--阻塞和异步
- 大数据时代的技术hive:hive介绍
- JAVA——代码块