- P1316 丢瓶盖
- 题意:陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上。
- 现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?
- 思路:嗯....明显的最小值最大问题,二分就ok了
-
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 123456 ll n,a[maxn],m,l,r; bool ok(int x) { int orz=a[0],s=1; for(int i=1; i<n; i++) if((a[i]-orz)>=x) { orz=a[i]; s++; if(s==m)break; } if(s==m)return 1; return 0; } int main() { scanf("%lld%lld",&n,&m); for(int i=0; i<n; i++) scanf("%lld",&a[i]); sort(a,a+n); l=1e9; for(int i=1; i<n; i++) l=min(a[i]-a[i-1],l); r=a[n-1]-a[0]; while(l<r) { int mid=(r+l)/2; if(ok(mid))l=mid+1; else r=mid; } printf("%lld\n",l-1); return 0; }
P1316 丢瓶盖-二分答案
最新推荐文章于 2021-07-11 17:47:59 发布