poj 3258 River Hopscot

http://poj.org/problem?id=3258

#include<iostream>

#include<string>

#include<cstring>

#include<cstdio>

#include<algorithm>

using namespace std;

const int N=50005;

int Dist[N];

int L,n,m;

bool toosmall(int k)

{

    int sum=0;

    int pre=0;

    for(int i=1;i<=n;++i)

    {

        if(Dist[i]-pre<k)

        {

            ++sum;

        }

        else

        {

            pre=Dist[i];

        }

    }

    if(Dist[n+1]-Dist[n]<k)

    ++sum;

    if(sum>m)

    return false;

    return true;

}

int main()

{

    while(cin>>L>>n>>m)

    {

         Dist[0]=0;

         Dist[n+1]=L;

         int high=L;

         int low=L;

         for(int i=1;i<=n;++i)

         {

             cin>>Dist[i];

             if(Dist[i]-Dist[i-1]<low)

             {

                 low=Dist[i]-Dist[i-1];

             }

         }

         low=min(low,Dist[n+1]-Dist[n]);

         sort(Dist,Dist+n+2);

         int mid=(high+low)/2;

         while(low<=high)

         {

             if(toosmall(mid))

             {

                 low=mid+1;

             }

             else

             {

                 high=mid-1;

             }

             mid=(high+low)/2;

         }

         cout<<high<<endl;

    }



	return 0;

}

你可能感兴趣的:(poj)