2016夏季练习——二分

来源:互联网 发布:wine源码 编辑:程序博客网 时间:2024/05/16 01:11

来源:POJ2456

二分水题

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 100000+10;int n,m;int a[MAXN];bool judge(int d){int cnt=1;int len=a[0]+d;for(int i=0;i<n;i++){if(a[i]>=len){len=a[i]+d;cnt++;}}if(cnt>=m) return 1;return 0;}int main(){while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++){scanf("%d",a+i);}sort(a,a+n);int left=0;int right=a[n-1]-a[0];int mid;int ans;while(left<=right) {    mid=(left+right)/2;    if(judge(mid)){    left=mid+1;    ans=mid;    }    else{    right=mid-1;    }   // cout<<left<<" "<<mid<<" "<<right<<endl;}cout<<ans<<endl;}return 0;}


0 0
原创粉丝点击