P1316 丟瓶蓋 AC於2018.11.4
阿新 • • 發佈:2018-12-19
題目描述
陶陶是個貪玩的孩子,他在地上丟了A個瓶蓋,為了簡化問題,我們可以當作這A個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出B個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?
輸入輸出格式
輸入格式:
第一行,兩個整數,A,B。(B<=A<=100000)
第二行,A個整數,分別為這A個瓶蓋座標。
輸出格式:
僅一個整數,為所求答案。
輸入輸出樣例
輸入樣例#1:
5 3 1 2 3 4 5
輸出樣例#1:
2
說明
限時3秒
【思路】
二分的模板題,直接套模板就好了,詳見這裡
【程式碼】
#include<cstdio> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<ctype.h> #include<numeric> using namespace std; int n,k; int a[1000001]; int check(int m) { int tmp=a[1]+m,cnt=1; for(int i=2;i<=n;i++) if(a[i]>=tmp) { cnt++; tmp=a[i]+m; } return cnt>=k; } int main() { scanf("%d%d",&n,&k); int l=1,r=1000000000; for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); while(l<r) { int mid=(l+r+1)/2; if(check(mid)) l=mid; else r=mid-1; } printf("%d",l); return 0; }