hdu4004

来源:互联网 发布:淘宝聊天工具怎么下载 编辑:程序博客网 时间:2024/06/05 22:42
/*
分析:
    二分,水。。题。竟然ac了、着实捏了一把冷汗、1Y。。。
    读完题后直接就想到二分了、不过看了数据范围后、感脚数据如果够强大
的话、是过不了滴。。当然、关键的系事实证明它咩有那么强大囧~~(不过
看到那个L的范围后着实被雷的里焦外嫩的、虽然acm里面不是第一次了、不过
你家养的蛤蟆经得起这样的折腾啊。。)

                                                 2013-07-03
*/





#include"iostream"#include"cstdio"#include"cstring"#include"algorithm"using namespace std;const int N=500005;int dir[N],dis[N];int main(){    int n,m,L;    int i;    int low,mid,up;    int temp,max,cnt;    while(scanf("%d%d%d",&L,&n,&m)!=-1)    {        dis[0]=0;        for(i=1;i<=n;i++)   scanf("%d",&dis[i]);        dis[n+1]=L;        sort(dis,dis+n+2);        max=0;        for(i=0;i<=n;i++)        {            dir[i]=dis[i+1]-dis[i];            if(max<dir[i])  max=dir[i];        }        if(m>n)    {printf("%d\n",max);continue;}        low=max;up=L;        while(low<=up)        {            mid=(low+up)>>1;            i=cnt=0;            while(i<=n && cnt<m)            {                cnt++;                temp=mid;                while(i<=n && dir[i]<=temp)                {                    temp-=dir[i];                    i++;                }            }            if(cnt<=m && i>n)   up=mid-1;            else    low=mid+1;        }        cout<<low<<endl;    }    return 0;}