【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 ...
随机推荐
- Prometheus + Grafana 监控系统搭
本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...
- Maven 专题(三):为什么要用Maven
1 真的需要吗? Maven 是干什么用的?这是很多同学在刚开始接触 Maven 时最大的问题.之所以会提出这个问题, 是因为即使不使用 Maven 我们仍然可以进行 B/S 结构项目的开发.从表述层 ...
- 数据可视化之DAX篇(十五)Power BI按表筛选的思路
https://zhuanlan.zhihu.com/p/121773967 数据分析就是筛选.分组.聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特 ...
- 02-URLConf调度器
1.工作原理 django通过urlconf来映射视图函数,只区分路径,不区分http方法 Django确定要使用的根URLconf模块,一般是在settings中的ROOT_URLCONF设置的值. ...
- Ethical Hacking - POST EXPLOITATION(1)
METERPRETER BASICS >help - shows help >background - backgrounds current session >sessions - ...
- JAVA学习过程中遇到的BUG
Java异常 1.NullPointException java.lang.NullPointException,就是我们经常遇到的空指针异常. java是没有指针的,这里说的"java指针 ...
- 修改虚拟机中的centos系统分辨率
使用vmware虚拟机安装centos系统,默认分辨都很低,可使用以下方法修改虚拟机中centos系统的分辨率 1,# vi /boot/grub/grub.conf 2,找到 kernel 的那一行 ...
- javascript兼容问题 : let降级到var 遇到的闭包问题的解决方法
我用 for(let x in y) 循环一个图片元素数组. for (let x in arr) { arr[x].onload = function(){ /* ... */ } } 这样写是没 ...
- C++语法小记---函数对象
函数对象 用于替代函数指针 优势:函数对象内部可以保存状态,而不必使用全局变量或静态局部变量 关键:重载"()"操作符 #include<iostream> #incl ...
- VS code 的集成终端Integrated terminal 的颜色问题
其实是默认终端的配色问题在使用vs code时,运行代码时,控制台是这样子的,搞得我很难受 一块一块的 其实是默认终端的配色问题 默认终端一般是powershell,还可以是cmd,或者git bas ...