zoukankan      html  css  js  c++  java
  • codevs 2703 奶牛代理商 XII

    题目描述 Description

     小徐从美国回来后,成为了USACO中国区的奶牛销售代理商,专门出售质优价廉的“FJ”牌奶牛。上题中,小徐终于凑够了钱,把她的小伙伴们接过来。

    现在,她需要给她自己和其他3个伙伴安排房间。在同一直线上有N间房子(2<=N<=10^5),每间房子有一个唯一的位置(即X坐标)Xi。

    (0<=Xi<=10^9)。为了方便交流,请你写一个程序,安排4间房子,使它们的最远距离最短。

    输入描述 Input Description

    第一行:一个正整数N

    第二行:N个正整数,Xi,空格隔开

    输出描述 Output Description

    最短的最远距离

    样例输入 Sample Input

    7

    1 7 4 20 13 2 11

    样例输出 Sample Output

    3(选择1、2、4、7)

    数据范围及提示 Data Size & Hint

    这个。就是二分。

    设f(x)为最远距离为x时能否安排4间房子

    这个函数当然有单调性,所以,果断二分搜索x。

    代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,a[100001],ans;
    bool pd(int x)
    {
        int b[100001],i;
        for(i=1;i<=n;i++)
          b[i]=1;
        for(i=2;i<=n;i++)
          if(a[i]-a[i-1]<=x&&b[i]<b[i-1]+1)
          {
              b[i]=b[i-1]+1;
              if(b[i]>=4)
                return 1;
          }
        return 0;
    }
    int main()
    {
        int i,j,l,r=0,mid;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
          scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        l=1;
        r=a[n]-a[1];
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(pd(mid))
              r=mid-1;
            else
              l=mid+1;
        }
        printf("%d",l);
        return 0;
    }
  • 相关阅读:
    重写、隐藏基类方法(new, override)
    Java FileHandler
    JMS example
    DB Locker
    计算与所有线段都重合的线段数目
    [转载] linux内存 问题
    oracle rownum & rowid mark a good tool
    java Wget Download
    java new way to implement singleton, use enum
    HttpPut Multipart and handle https request.
  • 原文地址:https://www.cnblogs.com/jyhywh/p/6052172.html
Copyright © 2011-2022 走看看