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+;
int n,a[N],l,r,mid;
inline int abs(int x){return x>?x:-x;}
bool check(int x){
int tot=;
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
if(abs(a[j]-a[i])<=x) if(++tot==) return ;
}
}
return ;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",a+i),r=max(r,a[i]);
while(l<r){
mid=l+r>>;
if(check(mid)) r=mid;
else l=mid+;
}
printf("%d",l);
return ;
}