洛谷 P1316 丟瓶蓋【二分答案】
阿新 • • 發佈:2018-07-24
-a 直線 pac print else ++ n-1 sin n)
題目描述
陶陶是個貪玩的孩子,他在地上丟了A個瓶蓋,為了簡化問題,我們可以當作這A個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裏找出B個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?
輸入輸出格式
輸入格式:
第一行,兩個整數,A,B。(B<=A<=100000)
第二行,A個整數,分別為這A個瓶蓋坐標。
輸出格式:
僅一個整數,為所求答案。
輸入輸出樣例
輸入樣例#1:
5 3
1 2 3 4 5
輸出樣例#1:
2
說明
限時3秒
【代碼】:
#include<bits/stdc++.h> const double eps = 1e-8; const int maxn = 1e6+5; #define inf 0x3f3f3f3f #define ll long long using namespace std; int n,k; int a[maxn]; int check(int x) { int sum = 1; int last = a[0]; for(int i=1;i<n;i++) { if(a[i]-last>x) { last=a[i]; sum++; } } return sum>=k; } void solve(int l,int r) { int mid; while(l<=r) { mid = (l+r)/2; if(check(mid)) l=mid+1; else r=mid-1; } printf("%d\n",l); } int main() { while(~scanf("%d%d",&n,&k)) { int l=0,r; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); r = a[n-1]-a[0]; solve(l,r); } } /* 4 11 8.02 7.43 4.57 5.39 */
洛谷 P1316 丟瓶蓋【二分答案】