POJ 3258 River Hopscotch(二分求最小中的最大)

来源:互联网 发布:gps漂移过滤算法 源码 编辑:程序博客网 时间:2024/06/05 19:47


Sample Input

25 5 2214112117

Sample Output

4


题目大意:在n块石头中删除m块石头(不含起始,和结束的石头),求出题目中的最小距离的最大距离。

思路:二分问题,确定上下界,后进行区间的枚举,注意最后的输出时,要的是不断矿大时的mid值,这样才保证最大。


#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<math.h>#define LL long long#define inf 0x3f3f3f3fusing namespace std;int a[50010];int main(){    int  n,m,j,k,l;    while(~scanf("%d%d%d",&l,&n,&m))    {        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        sort(a+1,a+n+1);        a[0]=0;//将开始和结束的石头也加上。        a[n+1]=l;        int low=0,high=l;        int pos,sum;        int ans;        while(high>=low)        {            sum=0;            int mid=(high+low)>>1;            pos=0;            for(int i=1;i<=n+1;i++)                if(a[i]-a[pos]<mid)//比假设的最小值还小就当删除                    sum++;                else                    pos=i;            if(sum>m)                high=mid-1;            else            {                low=mid+1;                ans=mid;            }        }        printf("%d\n",ans);    }}



1 0
原创粉丝点击