2703 奶牛代理商 XII

2703 奶牛代理商 XII

 

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 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。

分类标签 Tags 点此展开 

 
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,a[N],l,r,mid;
inline int abs(int x){return x>0?x:-x;}
bool check(int x){
    int tot=0; 
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(abs(a[j]-a[i])<=x) if(++tot==4) return 1;
        }
    }
    return 0;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",a+i),r=max(r,a[i]);
    while(l<r){
        mid=l+r>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    printf("%d",l);
    return 0;
}

 

posted @ 2016-10-04 21:22  神犇(shenben)  阅读(164)  评论(0编辑  收藏  举报