1. 程式人生 > >P1316 丟瓶蓋--(二分答案)

P1316 丟瓶蓋--(二分答案)

格式 class algo for 說明 d+ namespace printf ret

題目描述

陶陶是個貪玩的孩子,他在地上丟了A個瓶蓋,為了簡化問題,我們可以當作這A個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裏找出B個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?

輸入輸出格式

輸入格式:

第一行,兩個整數,A,B。(B<=A<=100000)

第二行,A個整數,分別為這A個瓶蓋坐標。

輸出格式:

僅一個整數,為所求答案。

輸入輸出樣例

輸入樣例#1: 復制
5 3
1 2 3 4 5
輸出樣例#1: 復制
2

說明

限時3秒

 1 #include<iostream>
 2
#include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 1e5+10; 7 int a[maxn]; 8 int n,m; 9 10 int main(){ 11 scanf("%d%d",&n,&m); 12 for( int i=1; i<=n; i++ ){ 13 scanf("%d",&a[i]); 14 }
15 sort(a+1,a+1+n); 16 int ans=0; 17 int l=0,r=a[n]; 18 19 while(l<=r){ 20 int mid=l+(r-l)/2; 21 int pos=1; 22 int s=1; 23 for( int i=2; i<=n; i++ ){ 24 if(a[i]-a[pos]>=mid) pos=i,s++; 25 } 26 if(s>=m){
27 ans=mid; 28 l=mid+1; 29 } 30 else r=mid-1; 31 } 32 printf("%d\n",ans); 33 return 0; 34 }

P1316 丟瓶蓋--(二分答案)