hdu4004 二分查找

来源:互联网 发布:淘宝产品描述设计 编辑:程序博客网 时间:2024/06/07 00:30

看数论证明太累,A水题一枚,二分枚举结果。。。

 

ACcode:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int nsize=55555;int L,n,m,maxs,dist;int stone[nsize];int Max(int a1,int a2){    return a1>a2? a1:a2;}int solve(int d){    int t=0,step=0;    for (int i=1;i<n;i++)    {        t+=stone[i]-stone[i-1];        if (t>d)        {            step++;            t=stone[i]-stone[i-1];        }    }    if (t>0) step++;    return step;}int Fin(){    int mid,down=maxs,up=L;    while (down<up)    {        mid=(down+up)>>1;        if (solve(mid)>m)        {            down=mid+1;        }        else        {            up=mid;        }    }    return up;}int main(){    while (~scanf("%d %d %d",&L,&n,&m))    {        int t=0;        for (int i=0;i<n;i++)        {            scanf("%d",&stone[i]);        }        stone[n]=0,stone[n+1]=L;        n+=2;        sort(stone,stone+n);        maxs=0;        for (int i=1;i<n;i++)        {            maxs=Max(maxs,stone[i]-stone[i-1]);        }        dist=Fin();        printf("%d\n",dist);    }    return 0;}


 

原创粉丝点击