50.分治算法练习: 二分算法: 2703 奶牛代理商 XII
时间限制: 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的更多相关文章
- 2703 奶牛代理商 XII
2703 奶牛代理商 XII 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小徐从美国回来后,成为了USAC ...
- 算法leetcode二分算法
二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 一.有序序列 ...
- 编程思想与算法leetcode_二分算法详解
二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 二分查找 一 ...
- 数据结构与算法 --- js二分算法
var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]; //递归方式 function binarySearch(data,dest,start,end ){ ...
- what' the python之递归函数、二分算法与汉诺塔游戏
what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况 ...
- 分治算法(二分查找)、STL函数库的应用第五弹——二分函数
分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- JS算法之二分查找
二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是 多维数组,只要有序,就可以用二分查找来优化. 二分查找是一种「分治」思想的算法,大概流程如下: 1.数组中排在中 ...
- 【算法】二分查找法&大O表示法
二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...
随机推荐
- python 输出 a+b
AC代码: 单组输入: s=input().split() print(int(s[0])+int(s[1]))
- Hive ORC表的使用
创建普通临时表: create table if not exists test_orc_tmp( name string, gender string, cnt BIGINT )row ...
- 42、和为S的两个数字
一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.解法 import java.util.ArrayLis ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- Linux 内核进程管理之进程ID【转】
转自:http://www.cnblogs.com/hazir/p/linux_kernel_pid.html Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构, ...
- PSQueue队列操作
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈(FILO,First In Last Out,先进后出)属于线性表一样,队 ...
- [ python ] 练习作业 - 1
1,写代码,有如下列表,按照要求实现每一个功能 li = ["alex","wusir","eric","rain",& ...
- java基础13 接口(及关键字:interface、implements)
接口 1.接口的定义格式 interface 接口名{ } interface :接口的关键字 implements:实现接口的关键字 2.接口的作用 1.程序的解耦.(低耦合) 2.定 ...
- shell视频
本帖最后由 Shell_HAT 于 2014-04-18 16:51 编辑 尚观全套RHCE视频http://pan.baidu.com/s/1pJvzVR1 马哥网络班-中级视频内容http://p ...
- plsPlugin
init: 监控目录变化(增删) 监控jar变化,load