【FZYZOJ】珂神不等式&平角咖啡厅 题解(二分答案)
前言:这题太神了,蒟蒻表示思路完全断档,甚至想到DP。得到大佬hs-black的帮助后才AC此题orz
---------------------------------
题目描述
ck love…… what?
Long before,某个巷口的拐角处,有个咖啡厅,那咖啡厅真是:北通巫峡,南极潇湘,不知其几千里也。
“等到了一千年以后~~”,3013年,ck想起那拐角咖啡厅,甚是思念。于是,他在北冥之处也开了家咖啡厅,取名叫“平角咖啡厅”。既然是平角,就不会拐弯,那么我们可以把他的摊位置于一数轴上。ck富可敌国,坐拥n个服务员,这些服务员的当前位置在数轴上分别表示为:h1,h2,h3...hn.这天,他遇到一个棘手的事情,领导“兰斯朵蕾”来抽查,ck和他的小服务员们被要求在最短的时间内接待完最后一批顾客。最后这批顾客有m个人,他们对应站在数轴位置p1,p2,p3...pm。由于是31st century,顾客们都很懒,他们只会呆在原地接受招待。因此,服务员都是在数轴上的“移动靶”,他们每秒钟可以原地不动,或者向左或向右一个单位长度,而服务员们的手速是极快的,因此不用计算招待的时间。What‘s more,一个顾客可以被多个服务员招待。现在,为了尽快得到领导的认可,为了尽快得到老板娘的拥抱,你是不是该主动帮ck算算,他的服务员最快能在几秒后完成“每个顾客都至少被招待一次”的任务,从而听取“兰斯道瑞”领导的训话以及接受老板娘的拥抱呢?(不妨假设一结束招待就可以面见兰斯道瑞并和老板娘拥抱。)
ck love……what?Music, of course!!咖啡厅的音乐是必不可少的,“音乐小丸子”ck,和老板娘又对唱了一首:“爱转角遇见了谁,是否有爱情的美,爱转角以后的街,能不能由我来陪~~~……”
输入格式
第一行,两个正整数n,m
第二行,n个互不相同的正整数,h1,h2,h3.....hn
第三行,m个互不相同的正整数,p1,p2.p3....pm
含义都如题目所述。At the same time,由于Lzl蒟蒟蒻非常mercy,所以,h和p都从小到大排好了序(此处应该有掌声!!)
输出格式
仅一个数,即为所求的答案。
------------------------------------------
二分最少用的时间。在$check$函数中,我们设置$last$表示上个服务员不能满足的顾客的位置。假设当前服务员为$i$,顾客为$j$,整体思路就是从$last$开始,一直到顾客$j$,看$i$能否满足要求,如果满足就$j--$;不满足则更新$last$的位置,$i--$。
注意一个细节:注意$i$的位置与$j$的位置还有$last$的位置距离的大小关系。写起来就是:
$if\ (min(abs(h[i]-p[last]),abs(h[i]-p[j]))+abs(p[last]-p[j])<=x)\ j--$
时间复杂度$O(n\log n)$
代码:
//二分 O(nlogn)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,h[],p[];
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if (ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x* +ch-'';ch=getchar();}
return x*f;
}
int check(int x)
{
int i=n,j=m,last=m;
while(i>&&j>)
{
if (min(abs(h[i]-p[last]),abs(h[i]-p[j]))+abs(p[last]-p[j])<=x) j--;
else last=j,i--;
}
if (j>) return ;
else return ;
}
int work()
{
int l=,r=1e10;
while(l<=r)
{
int mid=(l+r)>>;
if (check(mid)) r=mid-;
else l=mid+;
}
return l;
}
signed main()
{
n=read(),m=read();
for (int i=;i<=n;i++) h[i]=read();
for (int i=;i<=m;i++) p[i]=read();
cout<<work();
return ;
}
【FZYZOJ】珂神不等式&平角咖啡厅 题解(二分答案)的更多相关文章
- luoguP2680 运输计划 题解(二分答案+树上差分)
P2680 运输计划 题目 这道题如果是看的我的树上差分来的,那么肯定一看题目就可以想到树上差分. 至于这是怎么想到的,一步一步来: 1.n有300000,不可能暴力枚举每一条边 2.因为我们要使运 ...
- 洛谷P3957 跳房子 题解 二分答案/DP/RMQ
题目链接:https://www.luogu.org/problem/P3957 这道题目我用到了如下算法: 线段树求区间最大值: 二分答案: DP求每一次枚举答案g时是否能够找到 \(\ge k\) ...
- 【bzoj4326】[NOIP2015]运输计划 二分答案+LCA
题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...
- POJ 3273 Monthly Expense 【二分答案】
题意:给出n天的花费,需要将这n天的花费分成m组,使得每份的和尽量小,求出这个最小的和 看题目看了好久不懂题意,最后还是看了题解 二分答案,上界为这n天花费的总和,下界为这n天里面花费最多的那一天 如 ...
- luoguP1419 寻找段落(二分答案+单调队列)
题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在 ...
- CF85E Guard Towers(二分答案+二分图)
题意 已知 N 座塔的坐标,N≤5000 把它们分成两组,使得同组内的两座塔的曼哈顿距离最大值最小 在此前提下求出有多少种分组方案 mod 109+7 题解 二分答案 mid 曼哈顿距离 >mi ...
- 【题解】 [HEOI2016]排序题解 (二分答案,线段树)
题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...
- HDU 6070题解(二分+线段树)
题面 传送门 此题的题意不是很清晰,要注意的一点是在区间[L,R]中,默认题目编号最后一次出现的时候是AC的 比如1 2 1 2 3 ,在区间[1,4]中,第3次提交时AC第1题,第4次提交时AC第2 ...
随机推荐
- day39 作业
实现生产消费原理 from multiprocessing import Process,JoinableQueue import time import random def cooker(q): ...
- 数据可视化之powerBI基础(十)快速度量值,帮你更快的进行数据分析
https://zhuanlan.zhihu.com/p/64414831 刚开始学习PowerBI,最头疼的可能就是度量值了,毕竟用了Excel这么多年,只相信自己眼睛看到的,对于这个"虚 ...
- 移除hmtl5 input type=“number”的step验证
设置 step="any"例如:<input type="number" step="any" value=""& ...
- pytest框架的安装与使用
pytest框架的安装与使用 一,pytest了解 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高. ...
- 08-Python面对对象进阶
一.面向对象编程三大特征 Python是面向对象的语言,同样支持面向对象的编程的三大特征:继承,封装,多态. 封装是指隐藏对象的属性和实现细节,只对外提供必要的一些方法,私有属性,私有方法是实现封装地 ...
- ajax配合art-template模板引擎的使用
最近才接触js的模板引擎听说相比以前使用的js foreach加载后台返回的json数据简便很多而且效率方面也很不错.今天自己玩了一下 后台使用的是.net mvc,数据库脚本就不提供了,返回的Jso ...
- 索引中丢失 IN 或 OUT 参数:: 103,解决办法
索引中丢失 IN 或 OUT 参数:: 103 这个原因是数据库中的字段类型与SQL语句中的类型不匹配造成的,103代表第103个字段参数错误.找到对应参数配置或者SQL中这个参数的类型是否与数据库 ...
- 集训作业 洛谷P1866 编号
这个题是个数学题啊. 总体思路不是很难,每个兔子有一个编号,只要不停的看下一个兔子有多少可选编号,再乘上之前的所有可能性就可以算出一共的编号方法. #include<iostream> # ...
- reCAPTCHA无法加载?一个小工具就可以轻松解决!
Chrome用户可以在应用商店搜索gooreplacer安装,或者点我下载,然后打开chrome://extensions/,将下载的crx文件拖入浏览器窗口,即可完成安装 Firefox用户可以在 ...
- swfupload控件文件上传大小限制设置
swfupload控件,是我在开发过程中用到的上传文件的控件,非常实用和方便.但最近碰到一些问题,解决之后进行一下整理. 因为用户上传文件的大小限制增加,导致原本上传控件时,文件的大小需要进行调整和限 ...