货物运输

题目连接:

http://acm.hdu.edu.cn/showproblem.php?pid=5699

Description

公元2222年,l国发生了一场战争。

小Y负责领导工人运输物资。

其中有m种物资的运输方案,每种运输方案形如li,ri。表示存在一种货物从li运到ri。

这里有n个城市,第i个城市与第i+1个城市相连(这里1号城市和n号城市并不相连),并且从i号城市走到i+1号或者从i+1号走到i号需要耗费1点时间。

由于高科技的存在,小Y想到了一种节省时间的好方案。在X号城市与Y号城市之间设立传送站,只要这么做,在X号城市走到Y号城市不需要耗费时间,同样的,从Y号城市走到X号城市也不需要耗费时间。

但是为了防止混乱,只能设立这么一条传送站。

现在这些运输方案同时进行,小Y想让最后到达目的地的运输方案时间最短。

在样例中,存在两条运输方案,分别是1号城市到3号与2号到4号,那么我们在2号城市与3号城市建立传送站,这样运输方案时间最长的只需要1点时间就可以了。

Input

多组测试数据

第一行两个整数n,m(1≤n,m≤1000000)。

接下来m行,每行两个整数li,ri(1≤li,ri≤n)。(若li=ri,则不需要耗费任何时间)

Output

一个数表示答案。

Sample Input

5 2

1 3

2 4

Sample Output

1

Hint

题意

题解:

二分答案

设修桥的区间为l,r,我路线为L,R

那么 |L-l|+|R-r|<=mid

则:

L - l + R - r <= mid

l - L + R - r <= mid

L - l + r - R <= mid

l - L + r - R <= mid

所以:

L + R - mid <= l + r <= L + R + mid

L - R - mid <= l - r <= L - R + mid

然后检查是否有合法的 l+r就好了……

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int l[maxn],r[maxn];
int n,m;
bool check(int k)
{
int Min=-1e9,Max=1e9;
for(int i=1;i<=m;i++)
{
if(r[i]-l[i]<=k)continue;
Min=max(l[i]+r[i]-k,Min);
Max=min(l[i]+r[i]+k,Max);
}
if(Min>Max)return 0;
Min=-1e9,Max=1e9;
for(int i=1;i<=m;i++)
{
if(r[i]-l[i]<=k)continue;
Min=max(l[i]-r[i]-k,Min);
Max=min(l[i]-r[i]+k,Max);
}
if(Min>Max)return 0;
return 1;
}
void solve()
{
for(int i=1;i<=m;i++)
{
scanf("%d%d",&l[i],&r[i]);
if(l[i]>r[i])swap(l[i],r[i]);
}
int L=0,R=n,ans=n;
while(L<=R)
{
int mid=(L+R)/2;
if(check(mid))R=mid-1,ans=mid;
else L=mid+1;
}
printf("%d\n",ans);
}
int main()
{
while(cin>>n>>m)solve();
}

HDU 5699 货物运输 二分的更多相关文章

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

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

  2. 【LCA&倍增】货物运输 @upcexam5909

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 在一片苍茫的大海上,有n座岛屿,岛屿与岛屿之间由桥梁连接,所有的岛屿刚好被桥梁连接成一个树形结构,即共n-1架桥梁,且从任何一座岛屿出发都能 ...

  3. Django自学计划之集装箱货物运输物流仓储一站式ERP系统

    业余开始学习时间:2018年1月 业余学习时间段:每天下班晚饭后时间+无事的星期六和星期天+上班时的空闲时间 自学目标: 1.我们要用管理的思维来写我们的系统! 2.我们要用我们的ERP系统帮助中小集 ...

  4. HDU 5699 二分+线性约束

    http://acm.hdu.edu.cn/showproblem.php?pid=5699 此题满足二分性质,关键在于如何判断当前的时间值可以满足所有的运送方案中的最长的时间. 对于每一次枚举出的k ...

  5. [51nod1671]货物运输

    公元2222年,l国发生了一场战争. 小Y负责领导工人运输物资. 其中有m种物资的运输方案,每种运输方案形如li,ri.表示存在一种货物从li运到ri. 这里有n个城市,第i个城市与第i+1个城市相连 ...

  6. 货物运输 51Nod - 1671

    公元2222年,l国发生了一场战争. 小Y负责领导工人运输物资. 其中有m种物资的运输方案,每种运输方案形如li,ri.表示存在一种货物从li运到ri. 这里有n个城市,第i个城市与第i+1个城市相连 ...

  7. HDU 3586 Information Disturbing (二分+树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  8. HDU 5726 GCD (RMQ + 二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...

  9. hdu 5432 Pyramid Split 二分

    Pyramid Split Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/conte ...

随机推荐

  1. Python 使用 Redis 操作

    1.redis简介 redis是一款开源免费的高性能key-value数据库,redis特点: 支持更多的数据类型:字符串(String).列表(List).哈希(Map).数字(Int).集合(Se ...

  2. CTF常用python库PwnTools的使用学习

    之前主要是使用zio库,对pwntools的了解仅限于DynELF,以为zio就可以取代pwntools.后来发现pwntools有很多的高级用法都不曾听说过,这次学习一下用法,希望可以在以后的exp ...

  3. 树莓派3B更换源为阿里源

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #科大源 sudo nano /etc/apt/sources.list deb htt ...

  4. C# 在RichTextBox根据内容自动调整高度

    private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)   {   richTextB ...

  5. sicily 1198. Substring (递归全排列+排序)

    DescriptionDr lee cuts a string S into N pieces,s[1],…,s[N]. Now, Dr lee gives you these N sub-strin ...

  6. 【LOJ】#2055. 「TJOI / HEOI2016」排序

    题解 看错题了,我以为是询问Q是个数字,问它在哪个位置 我一想这不直接01序列搞一下就好了嘛(事实上是012) 然后呢,我发现样例没过. 啊我看错题了,问的是Q这个位置是啥-- 哦,套用我之前的想法不 ...

  7. 【LOJ】#2052. 「HNOI2016」矿区

    题解 之前尝试HNOI2016的时候弃坑的一道,然后给补回来 (为啥我一些计算几何就写得好长,不过我写啥都长orz) 我们尝试给这个平面图分域,好把这个平面图转成对偶图 怎么分呢,我今天也是第一次会 ...

  8. BZOJ 1861: [Zjoi2006]Book 书架 (splay)

    1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1453  Solved: 822[Submit][Stat ...

  9. bzoj 1237 [SCOI2008]配对 贪心+dp

    思路:dp[ i ] 表示 排序后前 i 个元素匹配的最小值, 我们可以发现每个点和它匹配的点的距离不会超过2,这样就能转移啦. #include<bits/stdc++.h> #defi ...

  10. 8-3 Bits Equalizer uva12545

    题意: 给出字符串s包含'0' '1' '?'; 再给出字符串t只包含01: 现在我们可以对S做三个操作:把0变成1,把?变成0或1,任意两个位置交换: 问最少操作几次s == t: 贪心 默认除去那 ...