dp专辑M - River Hopscotch [二分查找]

来源:互联网 发布:网络文案岗位职责 编辑:程序博客网 时间:2024/05/29 19:48

题意:

数轴上有n个石子,第i个石头的坐标为Di,现在要从0跳到L,每次条都从一个石子跳到相邻的下一个石子。 现在允许你移走M个石子,问移走这M个石子后,相邻两个石子距离的最小值中的最大值是多少。

分析:

二分查找资料:http://blog.csdn.net/lmyclever/article/details/6682731


//AC CODE:

#include<stdio.h>#include<algorithm>using namespace std;const int maxint=50010;int f[maxint];int l,m,n;bool isOK(int r){    int k=0,i,count=0;    for(i=1; i<=n+1; i++)    {        if(f[i]-k<r)            count++;//可以移走的石子个数        else            k=f[i];    }    if(count<=m)        return true;    return false;}int main(){    int i;    scanf("%d%d%d",&l,&n,&m);    for(i=1; i<=n; i++)        scanf("%d",&f[i]);    sort(f+1,f+n+1);    f[n+1]=l;    int left,right,mid;    left=0;    right=l;    int ans;    while(left<=right)    {        mid=(left+right)/2;        if(isOK(mid))        {            ans=mid;            left=mid+1;        }        else            right=mid-1;    }    printf("%d\n",ans);    return 0;}