时间限制: 1
s

空间限制: 32000
KB

题目等级
: 黄金
Gold

题解

查看运行结果

题目描述 Description

小徐从美国回来后,成为了USACO中国区的奶牛销售代理商,专门出售质优价廉的“FJ”牌奶牛。上题中,小徐终于凑够了钱,把她的小伙伴们接过来。

现在,她需要给她自己和其他3个伙伴安排房间。在同一直线上有N间房子(2<=N<=10^5),每间房子有一个唯一的位置(即X坐标)Xi。

(0<=Xi<=10^9)。为了方便交流,请你写一个程序,安排4间房子,使它们的最远距离最短。

输入描述 Input
Description

第一行:一个正整数N

第二行:N个正整数,Xi,空格隔开

输出描述 Output
Description

最短的最远距离

样例输入 Sample
Input

7

1 7 4 20
13 2 11

样例输出 Sample
Output

3(选择1、2、4、7)

数据范围及提示 Data
Size & Hint

这个。就是二分。

设f(x)为最远距离为x时能否安排4间房子

这个函数当然有单调性,所以,果断二分搜索x。

错误理解:不是寻找坐标最小的,而是寻找x之差最小的

错误代码:

#include

using namespace std;

#include

#include

int p[100100];

int n;

int cmp(const int &a,const int &b)

{

return a>b;

}

int main()

{

cin>>n;

for(int i=1;i<=n;++i)

scanf("%d",&p[i]);

sort(p+1,p+n+1);

int a[3];

for(int i=1,j=0;i<=3;++i,++j)

a[j]=p[i+1]-p[i];

sort(a,a+3,cmp);

printf("%d\n",a[0]);

return 0;

}

正确代码:

方法一:贪心:全搜索法:

#include

using namespace std;

#include

#include

#include

int p[100100];

int n;

int remax(int a,int b)

{

if(a>=b) return a;

return b;

}

int main()

{

cin>>n;

for(int i=1;i<=n;++i)

scanf("%d",&p[i]);

sort(p+1,p+n+1);

int min=pow(10,8);

int t[4];

for(int i=1;i<=n-3;++i)

{

t[1]=p[i+1]-p[i];

t[2]=p[i+2]-p[i+1];

t[3]=p[i+3]-p[i+2];

int fur=remax(remax(t[1],t[2]),t[3]);

if(fur

min=fur;

}

printf("%d\n",min);

return 0;

}

50.分治算法练习:  二分算法:  2703 奶牛代理商 XII的更多相关文章

  1. 2703 奶牛代理商 XII

    2703 奶牛代理商 XII  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 小徐从美国回来后,成为了USAC ...

  2. 算法leetcode二分算法

    二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 一.有序序列 ...

  3. 编程思想与算法leetcode_二分算法详解

    二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 二分查找 一 ...

  4. 数据结构与算法 --- js二分算法

    var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]; //递归方式 function binarySearch(data,dest,start,end ){ ...

  5. what' the python之递归函数、二分算法与汉诺塔游戏

    what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况 ...

  6. 分治算法(二分查找)、STL函数库的应用第五弹——二分函数

    分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...

  7. python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  8. JS算法之二分查找

    二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是 多维数组,只要有序,就可以用二分查找来优化. 二分查找是一种「分治」思想的算法,大概流程如下: 1.数组中排在中 ...

  9. 【算法】二分查找法&大O表示法

    二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...

随机推荐

  1. CRF++模板使用(转)

    CRF++模板构建分为两类,一类是Unigram标注,一类是Bigram标注. Unigram和Bigram模板分别生成CRF的状态特征函数  和转移特征函数  .其中  是标签,  是观测序列,   ...

  2. 统计oracle表中字段的个数

    select count(column_name) from user_tab_columns where table_name='emp' dba权限对应的视图是dba_tab_columns 和a ...

  3. docker之构建redis-cluster集群

    下载和编译redis安装包 参考:https://www.cnblogs.com/cwp-bg/p/8094914.html # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个 ...

  4. Ubuntu 上更新 Flash 插件

    2018-02-19 12:08:28 更新: 现在的 Google Chrome 浏览器自带了 Flash 支持,无需安装.而 Firefox 浏览器没有提供 Flash 支持,所以用 Firefo ...

  5. Jmeter命令行选项

    示例:jmeter.bat -n -j %tmp%\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~ ...

  6. acm专题---dfs+bfs

    题目来源:http://hihocoder.com/problemset/problem/1049 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  7. javascript练习(二)

    案例 输出100个数字 案例  打印100以内 7的倍数 案例  打印100以内的奇数 案例  打印100以内所有偶数的和 打印图形 ********** ********** ********** ...

  8. 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)

    一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...

  9. Centos bash: make: command not found

    一般出现这个bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make.vim等常用命令,直接yum安装下即可: yum -y ...

  10. bzoj 1106

    思路:很容易就能想到统计没两对点之间的未匹配点的个数. 在想怎么用数据结构维护这个东西, 没有想到用树状数组能很巧妙地维护出来, 就写了个莫队... 莫队:暴力维护就好了. #include<b ...