HDU 5699 二分+线性约束
http://acm.hdu.edu.cn/showproblem.php?pid=5699
此题满足二分性质,关键在于如何判断当前的时间值可以满足所有的运送方案中的最长的时间。
对于每一次枚举出的k,对于朴素时间就不大于这个值的方案显然满足,剩下的方案耗费的时间都大于k,换句话说剩下的方案如果想满足k就必须要通过传送点,才有可能实现。
对于 (Li,Ri) 通过传送点(L,R)的时间就是 abs(Ri-R)+abs(Li-L)
传送点与路径的情况有四种
L_________R L______________R L___________R L_________R
Li_____________Ri Li_________Ri Li_________Ri Li_________Ri
一开始思维僵化固执的以为L的值一定出现在Li的右侧,所以用了贪心来决策,后来才意识到其实可以从出发点先走到传送点,从传送点再走到目的点!
我们不难得出式子 abs(Ri-R)+abs(Li-L)<=k
将abs拆开就是四个式子:
- Ri-R+Li-L<=k;
- Ri-R-Li+L<=k;
- R-Ri+Li-L<=k;
- R-Ri-Li+L<=k;
由1,4得 : 5.Ri+Li-k<=R+L<=k+Li+Ri
由2,3得: 6. Li-Ri-k<=R-L<=Li-Ri+k
虽然可以有这两个式子直接推出LR的范围
7. Li-k<=L<=Li+k
8. Ri-k<=R<=Ri+k
但是这并不是一个充要条件!
5,6成立则7,8也成立,但是7,8成立5,6却不一定成立,所以无法直接依据7,8判定。
我们不难统计出这四个边界得值,最后判断一下是否存在合法的区间使得LR存在即可
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int pl[],pr[];
bool ok(int k,int m)
{
int i,j,a=-inf,c=-inf,b=inf,d=inf;
for(i=;i<=m;++i){
if(pr[i]-pl[i]<=k) continue;
a=max(a,pl[i]+pr[i]-k);
c=max(c,pl[i]-pr[i]-k);
b=min(b,pl[i]+pr[i]+k);
d=min(d,pl[i]-pr[i]+k);
}
return a <= b&&c <= d;
} int main()
{
int n,m,i,j,k;
while(cin>>n>>m){
for(i=;i<=m;++i){
scanf("%d%d",pl+i,pr+i);
if(pl[i]>pr[i])
swap(pl[i],pr[i]);
}
int l=,r=n,mid;
while(l<r){
mid=l+(r-l)/;
if(ok(mid,m)) r=mid;
else l=mid+;
}cout<<l<<endl;
}
return ;
}
HDU 5699 二分+线性约束的更多相关文章
- hdu 4024 二分
转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html 一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...
- HDU 5699 货物运输 二分
货物运输 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5699 Description 公元2222年,l国发生了一场战争. 小Y负责领导工人运输物 ...
- HDU 5699 货物运输 二分判定
转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...
- hdu 1669(二分+多重匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...
- HDU 3586 二分答案+树形DP判定
HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...
- hdu 4004 (二分加贪心) 青蛙过河
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...
- hdu 5046 二分+DLX模板
http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...
- hdu 3277(二分+最大流+拆点+离线处理+模板问题...)
Marriage Match III Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 3081(二分+并查集+最大流||二分图匹配)
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
随机推荐
- mysql杀死线程
查询 正在执行的事务:SELECT * FROM information_schema.INNODB_TRX 根据这个事务的线程ID(trx_mysql_thread_id): 可以使用mysql命令 ...
- [笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程
Docker的好处之一,就是在Container里面可以随意瞎搞,不用担心弄崩Host的环境. 而nvidia-docker2的好处是NVidia帮你配好了Host和Container之间的CUDA相 ...
- BitmapFactory.decodeStream(inputStream)返回null的解决方法
场景:Android,通过inputStream从网络上获取图片 随后两次使用BitmapFactory对InputStream进行操作,一次获取宽高,另一次缩放 但是在缩放时,发现inputStre ...
- loadrunner配置多台负载机设置
面对并发量比较大的性能需求,用单台机子进行加压由于本身硬件资源.网络资源等的限制已经不能满足该性能测试条件,这个时候就需要在场景中添加多台负载机来联机做性能测试.添加多台负载机的设置非常简单下面做一个 ...
- 用random模块实现验证码
#! /usr/bin/env python3 import random checkcode = "" ## 全部为数字的验证码 # for i in range(4): # c ...
- iOS开发之HelloKitty(移动社交平台项目)
iOS开发之HelloKitty(移动社交平台项目,2015.3,parishe)
- [原创]CSS 去掉点li 的点 使得LI前面的点不在显示
我对博客的认识是:记录问题,解决问题,分享知识.如果有轮子,我不需要造轮子. 1.问题解决方式: 设置属性:li {list-style-type:none;} 2.更多属性参数参考 list-sty ...
- centos6.7安装lamp
1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ...
- 前端学习笔记之Z-index详解
CSS当中的z-index属性看起来足够简单,但是如果你真的想了解它是如何工作的话,在这简单的表面之下,又有许多值得探究的内容. 在这篇教程中,通过探究层叠上下文和一系列实际的例子,我们将会阐明z-i ...
- GATK的硬过滤
https://software.broadinstitute.org/gatk/documentation/article.php?id=2806