欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分 River Hopscotch (poj 3258)

程序员文章站 2024-03-17 15:34:22
...

一道二分答案的问题,我知道做法,但是方案我也不知道 为啥呢么分,可能脑子不是太好使,先记录下来回头打打思路题,再来想这个题

传送门

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int L,n,m;
bool check(int mid)
{
    int st,k;
    st=0,k=0;//最多可以删掉多少个石头
    for(int i=1; i<=n; i++)
    {
        if(a[i]-st<mid)
        {
            k++;
        }
        else
        st=a[i];
    }
    if(L-st<mid)
    {
        return false;
    }
    if(k>m)
        return false;//距离偏大
    return true;//偏小
}
int main()
{

    while(~scanf("%d %d %d",&L,&n,&m))
    {
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        int l=0,r=L,ans;
        while(r>=l)
        {
            int mid=l+r>>1;
            if(check(mid))
            {
                l=mid+1;
                ans=mid;
            }
            else
            {
                r=mid-1;
            }
        }
        printf("%d\n",ans);
    }
}