OpenJudge原题链接

题意:
约翰有N个牛棚位,分别在X1,X2,X3…Xn,约翰有C头牛,但是牛不喜欢这样的布局,一旦放进牛棚就会互相斗争,因此约翰希望将C头牛安置进牛棚,使任意两头牛的距离的最小值尽可能的大。(放置的尽可能稀疏)

限制条件
2 <= N <= 100,000
2 <= C <= N
0 <= X i X_i Xi​ <= 1,000,000,000

思路
二分+模拟+贪心。假设距离D为最优的放置,可以使得任意两头牛的距离最小值最大,那么D+1的距离肯定是不可能满足的,因为D已经是最优了,那么D-1的距离肯定是可以的,因为D能满足,降低要求肯定更能满足,因此可以发现答案值具有单调性,那么我们可以利用这个单调性的特点对答案进行二分选定,然后通过模拟放置检验是否可以放置成功即可。

AC代码如下:

#include "bits/stdc++.h"
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, c;bool check(int dis) { /// 在模拟放置的时候为了放置的尽可能的稀疏,因此从第一个位置开始放int cnt = 1; /// 记录成功放置的个数int last = a[0]; /// 记录上一次放置的位置for (int i = 1; i < n; ++i) {if (a[i] - last >= dis) { /// 当期位置和上一次放置位置相差大于或等于dis则当前位置可以放last = a[i];cnt++;}}  /// 放置个数大于等于C则可行,否则不可行if (cnt >= c) return true;else return false;/// 也可以简写:  return cnt >= c;
}int main() {cin >> n >> c;for (int i = 0; i < n; ++i) {cin >> a[i];}sort(a, a + n); /// 输入的位置是无序的,先排序方便模拟检验int l = 1, r = a[n - 1] - a[0];int ans;while (l <= r) {int mid = (l + r) / 2;if (check(mid)) { /// check函数用于判断当前值能否放置ans = mid; /// 记录每次可以放置的值,最后一次便是最优解l = mid + 1;} else {r = mid - 1;}}cout << ans << "\n";return 0;
}

OpenJudge 2456 Aggressive cows相关推荐

  1. 二分搜索 POJ 2456 Aggressive cows

    题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #incl ...

  2. POJ 2456 Aggressive cows(二分答案)

    Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22674 Accepted: 10636 Des ...

  3. 二分入门——poj 2456 aggressive cows

    这是一道二分的神奇贪心题,先上题目 Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11714 A ...

  4. poj 2456 Aggressive cows 【二分+最大化最小值】

    题目链接:http://poj.org/problem?id=2456 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 210 ...

  5. POJ 2456 - Aggressive cows(二分)

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

  6. POJ 2456 Aggressive cows ( 二分 贪心 )

    题意 : 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1e9) ...

  7. poj 2456 Aggressive cows(贪心+二分)

    描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000, ...

  8. Aggressive cows POJ - 2456

    2456 -- Aggressive cows 题目大意:有c只牛,要把他们放在n个屋子里,每个屋子放一只牛,每个屋子都在一根数轴上,给出他们的坐标,要让每个屋子间的最小距离尽可能的大,问这个最大距离 ...

  9. BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

    最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...

最新文章

  1. 浅说——九讲背包之01背包
  2. 面试:GET和POST两种基本请求方法有什么区别
  3. DbSetT().Where(e = true)之后再想Include怎么办?
  4. RocketMQ学习笔记(7)----RocketMQ的整体架构
  5. Access“INSERT INTO 语句的语法错误”解决办法
  6. mysql all privilege权限
  7. 常用ColorMatrixFilter收集
  8. linux awk拼接字符串,shell awk命令字符串拼接
  9. Qt之进程间通信(Windows消息)
  10. Tutorials 使用窗口功能分析信息
  11. 机器学习的数学基础——线性代数篇(一)
  12. [总结] 上海看房体验有感
  13. android问号icon,CSS3 动态问号图标(使用工具生成)
  14. 同级最强!天玑8200实测成绩放出,iQOO Neo7 SE神机配神U
  15. e的根号x次方的不定积分:整体代换+分部积分法
  16. USB Network Gate SDK Crack,构建USB Network Gate的技术
  17. 在线问答与学科管理系统
  18. 开源中国java商城项目jshop的部署与总结
  19. elbycheck.exe
  20. unity2020/2021等新版本 安装 barracuda 遇到的一些问题

热门文章

  1. Unity 镜头烟雾特效的笔记贴
  2. python的turtle画小人_Python绘制可爱的卡通人物 | 【turtle使用】
  3. MOTO LINUX系MOBILEPHONE的EZX库解读
  4. windows上交叉编译linux可执行文件
  5. 最近电脑常见问题分享
  6. cryptohack block ciphers
  7. Crawling is going on - Beta版本测试报告
  8. cur常用命令的介绍l
  9. 互联网时代的垄断及监管
  10. window or linux 开机黑屏,只有光标在闪