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. AngularJS 笔记系列(四)控制器和表达式

    控制器:在 Angular 中控制器是一个函数,用来向作用域中添加额外的功能.我们用它来给作用域对象设置初始状态,并添加自定义行为. 使用方法: var app = angualr.module('a ...

  2. Linux系统——本地yum仓库安装

    一.yum仓库概述 yum是基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需繁琐地一次次下载.安装. 二.yum仓库安装的方式 ...

  3. JsonObject没有fromObject、idea引入maven有红线没依赖、JsonObject maven 依赖包

    目录: 1.JsonObject maven 依赖包 2.idea引入maven有红线,没依赖 3.JsonObject没有fromObject \\\\\\\\\\\\\\\\\\\\\\\ 1.J ...

  4. XDU 1031

    #include<stdio.h> #define maxn 1005 int c[maxn][maxn]; int gcd(int a,int b){ ?a:gcd(b,a%b); } ...

  5. php AES-128-CBC 加密 通信java

    <?phpheader("Content-type: text/html; charset=utf-8");require('MyAES.php');class Xfb{ / ...

  6. 前端学习笔记之ES6快速入门

    0x1 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 20; } x ...

  7. jQuery判断元素是否显示 是否隐藏

    var node=$('#id'); 第一种写法 if(node.is(':hidden')){ //如果node是隐藏的则显示node元素,否则隐藏 node.show(); }else{ node ...

  8. ES6、7、8常用新特性总结(超实用)

    ES6常用新特性 1. let && const let 命令也用于变量声明,但是作用域为局部 { let a = 10; var b = 1; } 在函数外部可以获取到b,获取不到a ...

  9. elasticsearch 5.x集群安装

    1. 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.tar.gz 2. 解压 为便于 ...

  10. web.xml context-param配置

    context-param 为上下文初始化参数 解析:每个<context-param>元素含有一对参数名和参数值(param-name和param-value),用作应用的Servlet ...