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;
}

 

转载于:https://www.cnblogs.com/shenben/p/5931315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值