poj 3258

来源:互联网 发布:大数据可视化系统 编辑:程序博客网 时间:2024/06/18 16:31

题意:给出起点到终点的距离L,石头数n 和 每块石头距离起点的距离rock[i] 和最多可以移动的石头数m,求两块石头间最短距离的最大值。

和poj 3273一样可以用二分,枚举一个距离,然后看此距离最少要移走多少快石头,如果移动的石头多于m,则说明最短距离的最大值距离还要缩短,更改上区间,否则更改下区间。知道上下区间相等位置,输出枚举的中间值即可。

下面是试探性枚举mid时,计算至少要移走多少块的函数。

 

int rock[50005];

int L,m,n;
int remove(int mid)
{
    int j,ans=0;
    int temp=0;
    for(int i=1;i<=n;i++)
    {

        if(rock[i]-temp<mid)如果两块石头之间的距离小于mid,则这块石头要移除
        {
            ans++;
        }else temp=rock[i];
    }
    if(L-temp<mid)ans++;//最后这块石头是固定的,所以要看它前面的石头是否要移除
       return ans;
}

原创粉丝点击