OpenJudge 2456 Aggressive cows
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相关推荐
- 二分搜索 POJ 2456 Aggressive cows
题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #incl ...
- POJ 2456 Aggressive cows(二分答案)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22674 Accepted: 10636 Des ...
- 二分入门——poj 2456 aggressive cows
这是一道二分的神奇贪心题,先上题目 Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11714 A ...
- poj 2456 Aggressive cows 【二分+最大化最小值】
题目链接:http://poj.org/problem?id=2456 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 210 ...
- POJ 2456 - Aggressive cows(二分)
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- POJ 2456 Aggressive cows ( 二分 贪心 )
题意 : 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1e9) ...
- poj 2456 Aggressive cows(贪心+二分)
描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000, ...
- Aggressive cows POJ - 2456
2456 -- Aggressive cows 题目大意:有c只牛,要把他们放在n个屋子里,每个屋子放一只牛,每个屋子都在一根数轴上,给出他们的坐标,要让每个屋子间的最小距离尽可能的大,问这个最大距离 ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
最新文章
- 浅说——九讲背包之01背包
- 面试:GET和POST两种基本请求方法有什么区别
- DbSetT().Where(e = true)之后再想Include怎么办?
- RocketMQ学习笔记(7)----RocketMQ的整体架构
- Access“INSERT INTO 语句的语法错误”解决办法
- mysql all privilege权限
- 常用ColorMatrixFilter收集
- linux awk拼接字符串,shell awk命令字符串拼接
- Qt之进程间通信(Windows消息)
- Tutorials 使用窗口功能分析信息
- 机器学习的数学基础——线性代数篇(一)
- [总结] 上海看房体验有感
- android问号icon,CSS3 动态问号图标(使用工具生成)
- 同级最强!天玑8200实测成绩放出,iQOO Neo7 SE神机配神U
- e的根号x次方的不定积分:整体代换+分部积分法
- USB Network Gate SDK Crack,构建USB Network Gate的技术
- 在线问答与学科管理系统
- 开源中国java商城项目jshop的部署与总结
- elbycheck.exe
- unity2020/2021等新版本 安装 barracuda 遇到的一些问题