zoukankan      html  css  js  c++  java
  • 蚂蚁运输

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m;
    struct Node
    {
        int X,Y;
    }i[1000001];
    bool Check(int T) //每次Check()都想不出来,太弱T_T。
    {
        int Max=-1e9,Min=1e9;
        for (int a=1;a<=m;a++)
        {
            if (i[a].Y-i[a].X<=T)
              continue;
            Max=max(Max,i[a].X+i[a].Y-T);
            Min=min(Min,i[a].X+i[a].Y+T);
        }
        if (Max>Min)
          return false;
        Max=-1e9,Min=1e9;
        for (int a=1;a<=m;a++)
        {
            if (i[a].Y-i[a].X<=T)
              continue;
            Max=max(Max,i[a].X-i[a].Y-T);
            Min=min(Min,i[a].X-i[a].Y+T);
        }
        if (Max>Min)
          return false;
        return true;
    }
    int main() //二分答案还是做得少啊!
    {
        int T;
        scanf("%d%d",&n,&T);
        while (T--)
        {
            int t1,t2;
            scanf("%d%d",&t1,&t2);
            if (t1>t2)
              swap(t1,t2);
            if (t1!=t2) //若为0,就可以直接忽略了。
            {
                i[++m].X=t1;
                i[m].Y=t2;
            }
        }
        int Left=0,Right=n,Ans(0);
        while (Left<=Right) //二分答案。
        {
            int Mid=(Left+Right)>>1;
            if (Check(Mid))
            {
                Ans=Mid;
                Right=Mid-1;
            }
            else
              Left=Mid+1;
        }
        printf("%d",Ans);
        return 0;
    }
    
    /*
        由题可得,在L<R和X<Y的情况下,二分答案应符合,|L-X|+|R-Y|<=Mid,转化:
            L-X+R-Y<=Mid
            L-X+Y-R<=Mid
            X-L+R-Y<=Mid
            X-L+Y-R<=Mid
        综上:
            (L+R-Mid)<=X+Y<=(L+R+Mid)
            (L-R-Mid)<=X-Y<=(L-R+Mid)
        忽略中间内容,检验不等式即可。
    因为负数的关系,满足其一则总不等式满足,但由于不知道是哪个分式满足,故全部枚举。
    */
  • 相关阅读:
    Objective-C中#define的常见用法
    OpenGL ES为缓存提供数据的7个步骤
    绕指定点旋转算法
    矩阵平移旋转缩放公式
    矩阵和向量的乘法顺序
    干货集合
    RGB颜色空间与YCbCr颜色空间的互转
    UINavi中push控制器的时候隐藏TabBar
    CZLayer的阴影
    CALayer初认识
  • 原文地址:https://www.cnblogs.com/Ackermann/p/6020526.html
Copyright © 2011-2022 走看看