hdu 4004 The Frog's Games

来源:互联网 发布:淘宝客服回复客人刁难 编辑:程序博客网 时间:2024/05/16 05:06
二分答案:#include<iostream>#include<stdio.h>using namespace std;int a[500001];int b[500001];int l;;int n,m;bool ok(int mid){    int sum=0;    int bsu=0;    for(int i=1;i<=n+1;i++)    {        b[i]=a[i]-a[i-1];        sum=sum+b[i];        if(mid<b[i])          return false;        if( sum>mid)        {          bsu++;          i=i-1;          sum=0;        }        else if(sum==mid)        {          bsu++;          sum=0;        }         if(i==n+1&&bsu<=m)        {           return true;        }        if(bsu>=m&&i<n+1)        {             return false;        }     }   return false;}int main(){    while(scanf("%d%d%d",&l,&n,&m)!=EOF)    {       for(int i=1;i<=n;i++)       {          scanf("%d",&a[i]);       }       a[0]=0;       a[n+1]=l;       sort(a,a+n+1);       int left=l/m;       int right=l;       while(right>=left)       {         int mid=(right+left)/2;         if(ok(mid))         {           right=mid-1;         }         else         {           left=mid+1;         }        }        cout<<left<<endl;    }    return 0;}                     

原创粉丝点击