码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5699 货物运输 二分判定

时间:2016-05-25 00:15:52      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://blog.csdn.net/jtjy568805874/article/details/51480479

技术分享
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=1e6+5;
const int INF=0x3f3f3f3f;
struct Node{
  int l,r;
}p[N];
int n,m;
bool judge(int x){
  int mn1=INF,mx1=-INF,mn2=INF,mx2=-INF;
  for(int i=0;i<m;++i){
    if(p[i].r-p[i].l<=x)continue;
    mn1=min(mn1,p[i].l+p[i].r+x);
    mx1=max(mx1,p[i].l+p[i].r-x);
    mn2=min(mn2,p[i].r-p[i].l+x);
    mx2=max(mx2,p[i].r-p[i].l-x);
  }
  if(mn1>=mx1&&mn2>=mx2)return true;
  return false;
}
int main(){
    while(~scanf("%d%d",&n,&m)){
       for(int i=0;i<m;++i){
        scanf("%d%d",&p[i].l,&p[i].r);
        if(p[i].l>p[i].r)swap(p[i].l,p[i].r);
       }
       int l=0,r=n;
       while(l<r){
         int mid=(l+r)>>1;
         if(judge(mid))r=mid;
         else l=mid+1;
       }
       printf("%d\n",(l+r)>>1);
    }
    return 0;
}
View Code

 

HDU 5699 货物运输 二分判定

标签:

原文地址:http://www.cnblogs.com/shuguangzw/p/5525365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!