POJ 2456 Aggressive cows(贪心 + 二分)
原题链接:Aggressive cows
题目大意:农夫 建造了一座很长的畜栏,它包括
个隔间,这些小隔间依次编号为
. 但是,
的
头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。
决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?
题目分析:题意想要表达的是 把头牛放到
个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。这是一个典型的最小值最大化问题。先对畜栏编号从小到大排序,则最大距离不会超过两端的两头牛之间的差值,最小值为
。所以我们可以通过二分枚举最小值来求。假设当前的最小值为
,如果判断出最小差值为
时可以放下
头牛,说明当前的
有点小,就先让
变大再判断;如果放不下,说明当前的
太大了,就先让
变小然后再进行判断。直到求出一个最大的
就是最终的答案。
代码如下:(PS:输入输出用 )
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100005;
int num[MAX];
int n, c;
bool tanxin(int x) { // 判断 x 时,是否可以放得下 c 头牛
int cnt = 1, temp = num[0];
for (int i = 1; i < n; i++) {
if (num[i] - temp >= x) {
cnt++;
temp = num[i];
if (cnt == c) return true;
}
}
return false;
}
void erfen() { // 通过二分枚举最小值
int left = 0, right = num[n - 1] - num[0];
while (left <= right) {
int mid = (left + right) / 2;
if (tanxin(mid)) left = mid + 1;
else right = mid - 1;
}
printf("%d\n", left - 1);
}
int main() {
scanf("%d %d", &n, &c);
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
sort(num, num+n);
erfen();
return 0;
}
POJ 2456 Aggressive cows(贪心 + 二分)的更多相关文章
- poj 2456 Aggressive cows 贪心+二分
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25944 Accepted: 11982 ...
- POJ 2456 Aggressive cows (二分)
题目传送门 POJ 2456 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) s ...
- [ACM] poj 2456 Aggressive cows (二分查找)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5436 Accepted: 2720 D ...
- POJ - 2456 Aggressive cows(二分+贪心)
题意:把c个牛分进n个摊位,摊位位置已知,所有摊位分布在0 <= xi <= 1,000,000,000,问两头牛间最小距离的最大值. 分析:找所有最小距离取个最大的.所以二分找这个最小的 ...
- poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分
poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...
- 二分搜索 POJ 2456 Aggressive cows
题目传送门 /* 二分搜索:搜索安排最近牛的距离不小于d */ #include <cstdio> #include <algorithm> #include <cmat ...
- POJ 2456 Aggressive cows (二分 基础)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7924 Accepted: 3959 D ...
- 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: 18099 Accepted: 8619 ...
随机推荐
- vue插槽理解
1.插槽作用:父向子传递一段Html代码块 2.分类: (1)默认插槽:规则:父给子传,用父,不传,用子. (2)具名插槽:适用于一个页面有多个插槽时,需要做区分,使用name属性.给插槽取个名字 ( ...
- [BUUCTF]PWN——roarctf_2019_easy_pwn(详解)
roarctf_2019_easy_pwn 附件 步骤: 例行检查,64位程序,保护全开 试运行一下程序,看看大概的情况,经典的堆块的菜单 64位ida载入,改了一下各个选项的函数名,方便看程序(按N ...
- Vlookup大叔与一对多查找(Excel函数集团)
所谓一对多查找,就是根据一个条件,把多个符合条件的结果全部找出来. 其实吧,一对多查找不是什么,尤其是O365的Filter函数横空出世震撼全场之后,简直就是瞬间把所有传统的数组解法甩出去七八十来条街 ...
- Table.RowCount行列计数…Count(Power Query 之 M 语言)
数据源: 任意五行两列 目标: 计算行数(包括空行) 操作过程: [转换]>[对行进行计数] M公式: = Table.RowCount( 表 ) 扩展: 对表中列进行计数:= Table.C ...
- SQL优化一例:通过改变分组条件(减少计算次数)来提高效率
#与各人授权日期相关,所以有十万用户,就有十万次查询(相关子查询) @Run.ExecuteSql("更新各人应听正课数",@"update bi_data.study_ ...
- c++ 之面试题(3)数组递归查找
题目描述 1. 给定严格升序(没有相等元素)的数组a,元素个数为cnt, 查找num在数组中的位置序号(以0位起始). 如果没找到则返回: 比num小且最靠近的元素位置序号. 若所有元素均大于num则 ...
- 【LeetCode】331. Verify Preorder Serialization of a Binary Tree 解题报告(Python)
[LeetCode]331. Verify Preorder Serialization of a Binary Tree 解题报告(Python) 标签: LeetCode 题目地址:https:/ ...
- 牛客练习赛44 B:小y的线段
链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出\(n\)条线段,第\(i\)条线段的长度为\(a_i\),每次可以从第\(i\) ...
- 如何理解 TS 类型编程中的 extends 和 infer
extends extends 在TS类型编程中用法(T extends U),表示 T 中的某些在 U 里面,比较难描述,用法如下: T extends U ? X : Y 分为两种情况理解更直观一 ...
- vmware虚拟IOS系统
安装虚拟机 --以管理员的身份运行