POJ-2456.Aggressivecows.(二分求解最大化最小值)
本题大意:在坐标轴上有n个点,现在打算在这n个点上建立c个牛棚,由于牛对厂主的分配方式表示很不满意,它很暴躁,所以它会攻击离它很近的牛来获得快感,这件事让厂主大大知道了,他怎么可能容忍?所以他决定有策略的对牛进行分配仓库,他想让每头牛之间的距离尽可能远,现在他来求助你......
本题思路:本题一看就是二分啦嘻嘻嘻,有上界有下界求最优你敢信?演员......
回归正题...我们可以选择最大值作为上界,选择最小值作为下界,接着二分呀,我们枚举的当然是我们事先假定的每个牛之间的最小距离x(也就是说牛舍之间的距离大于x就可以建立牛舍了),那么问题就一目了然了,我们只需要看在给定的所有点中,是否存在至少c个点满足他们之间的距离都大于等于x呢满足就是true了,然后就是二分思想改变这个最小距离x的取值,如果成立则说明需要扩大范围,如果不成立则需要缩小范围,当然是二分思想扩大,然后取那个最优的就行了呀,也就是距离最大的那个呀。哦对了,有个问题没说清楚,所以为什么是在可行的时候我们反而扩大范围?因为我们是在数组内寻找满足上面我们说的条件的值,所以C(x)当然是越大越好。
那么何时我们结束二分呢?我们可以考虑到,所有牛舍的距离都不会重合,并且不能让他们相邻(会干架),所以我们判断当L - R > 1不成立时就结束二分。
嘤嘤嘤,所以我们上面讲的那个判断条件到底搞懂了没?重要的就是这一环了嘤嘤嘤,咱也不知道,咱也不敢问,不会的童鞋再回去看一下呀。
参考代码(???是我讲的不够清楚么还是???自己实现嘻嘻嘻):
#include <cstdio>
#include <algorithm>
#define mid ((l + r)) / 2
using namespace std; const int maxn = + , INF = 1e9;
int value[maxn];
int n, c; bool check(int x) {
int last = ;
for(int i = ; i < c; i ++) {
int cur = last + ;
while(cur < n && value[cur] - value[last] < x) cur ++;
if(cur == n) return false;
last = cur;
}
return true;
} int main() {
scanf("%d %d", &n, &c);
for(int i = ; i < n; i ++)
scanf("%d", &value[i]);
sort(value, value + n);
int l = , r = INF;
while(r - l > ) {
if(check(mid))
l = mid;
else
r = mid;
}
printf("%d\n", l);
return ;
}
POJ-2456.Aggressivecows.(二分求解最大化最小值)的更多相关文章
- POJ 3258(二分求最大化最小值)
题目链接:http://poj.org/problem?id=3258 题目大意是求删除哪M块石头之后似的石头之间的最短距离最大. 这道题目感觉大致代码写起来不算困难,难点在于边界处理上.我思考边界思 ...
- codeforce 1070 E Getting Deals Done(二分求最大化最小值)
Polycarp has a lot of work to do. Recently he has learned a new time management rule: "if a tas ...
- POJ:2456 Aggressive cows(z最大化最小值)
描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000, ...
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6697 Accepted: 2893 D ...
- POJ_2456 Aggressive cows 【二分求最大化最小值】
题目: Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are l ...
- poj 3258"River Hopscotch"(二分搜索+最大化最小值问题)
传送门 https://www.cnblogs.com/violet-acmer/p/9793209.html 题意: 有 N 块岩石,从中去掉任意 M 块后,求相邻两块岩石最小距离最大是多少? 题解 ...
- POJ 3258:River Hopscotch (最大化最小值)
[题意] 牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离, 现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值 ...
- poj 3104 晾衣服问题 最大化最小值
题意:n件衣服各含有ai水分,自然干一分钟一个单位,放烘干机一分钟k个单位,问:最短时间? 思路: mid为最短时间 如果 a[i]-mid>0说明需要放入烘干机去烘干 烘干的时间为x 那么满 ...
- poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分
poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...
随机推荐
- 工作中常用到的linux命令总结
linux系统ubantu debian系统下载文件:wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0 ...
- python3-安装第三方模块
在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Windows,请参考安装Python一节的内容 ...
- linux局域网通过映射(双网卡)访问外网
图示说明: 1.IP规划设置 主机名 ip地址 ip地址(第二个网卡配置的地址) 地址类别 oldboy01 192.168.10.20 空 仅可访问内网主机 oldboy02 192.168.10. ...
- Flutter-Radio單選框
Container( child: Radio<String>( value: "男", activeColor: Colors.red,//激活時的顏色 groupV ...
- Java验证码程序
1.设计思想利用random的随机生成数字,利用for循环控制随机数字的个数来控制验证码的输出.利用JFrame实现布局的管理,对登录框内容的位置进行管理. 2.流程图 3.源代码 denglu类 i ...
- 关于win7虚拟机的安装
VMware 安装以及秘钥 win7的光盘文件
- hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)
题目链接 题意:给出n个点.用两种颜色来给每个点染色.问能否存在一种染色方式,使不同颜色的点不能被划分到一条直线的两侧. 题解:求个凸包(其实只考虑四个点就行.但因为有板子,所以感觉这样写更休闲一些. ...
- [USACO19JAN]Shortcut题解
本题算法:最短路树 这是个啥玩意呢,就是对于一个图,构造一棵树,使从源点开始的单源最短路径与原图一模一样.怎么做呢,跑一边Dijkstra,然后对于一个点u,枚举它的边,设当前的边为cur_edge, ...
- 3D Computer Grapihcs Using OpenGL - 03 OpenGL Buffer Data
本节绘制一个三角形,并讲解Buffer Object-缓冲对象 OpenGL的窗口坐标 屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1. Buffer Obje ...
- 主流Linux可视化运维面板&安装包
一.AMH面板 1.官方网站 官方网站:http://amh.sh 2.面板介绍 截止到AMH4. 2 版本都是提供免费安装的,后来从5. 0 开始提供付费安装,可以理解开发者的盈利问题,毕竟提供免费 ...