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拆开就是四个式子:

  1. Ri-R+Li-L<=k;
  2. Ri-R-Li+L<=k;
  3. R-Ri+Li-L<=k;
  4. 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 二分+线性约束的更多相关文章

  1. hdu 4024 二分

    转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html   一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...

  2. HDU 5699 货物运输 二分

    货物运输 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5699 Description 公元2222年,l国发生了一场战争. 小Y负责领导工人运输物 ...

  3. HDU 5699 货物运输 二分判定

    转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...

  4. hdu 1669(二分+多重匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...

  5. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  6. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  7. hdu 5046 二分+DLX模板

    http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...

  8. hdu 3277(二分+最大流+拆点+离线处理+模板问题...)

    Marriage Match III Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. vue 动画过渡

    一.过渡(动画) 1. 简介 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果,本质上还是使用CSS3动画:transition.animation 2. 基本用法 1.使用t ...

  2. WebBrowser自动填充打开文件对话框

    WebBrowser自动填充打开文件对话框   在使用WebBrowser编写自动表单填写软件的时候,不知道大家是否遇到国填写文件选择表单的情况.遇到这种情况的时候,无法直接队Html元素赋值,必须模 ...

  3. SQL Server 数据分页查询

    最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...

  4. hdu5716

    地址: 题目: 带可选字符的多字符串匹配 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. TOSCA自动化测试工具--建立测试用例

    1.测试链接 demowebshop.tricentis.com 测试login 2.检查元素 3.Modules模块,建立自己的文件夹,右键Scan Application , Desktop 4. ...

  6. java.lang.ClassFormatError: Trjava.lang.ClassFormatError: Truncated class fileuncated class file

    周末过来加班,上传编译好的文件后,部署到服务器没事.但是服务器日志满了,把日志清除后,把服务启动,发现报这个错误,大致网上看了一下,这个错误是编译的文件损坏了.然后大致看了一下文件,还真是.由于日志满 ...

  7. 将std::array转换成std::tuple

    template<typename Array, std::size_t... Index> decltype(auto) array2tuple_impl(const Array& ...

  8. SpringMvc接受特殊符号参数被转义

    WEB开发时,在前端通过get / post 方法传递参数的时候  如果实参附带特殊符号,后端接收到的值中特殊符号就会被转义 例如该请求: http://localhost:10001/demo/in ...

  9. web.xml<context-param>与<init-param>的作用与区别

    <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件we ...

  10. 20145329《Java程序设计》实验四总结

    实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 1.搭建Android环境 2.安装Android,核心是配置JDK. ...