The Frog's Games

Problem Description

The  annual  Games  in  frogs'  kingdom  started  again.  The  most  famous  game  is  the  Ironfrog Triathlon. One test in the Ironfrog Triathlon is jumping. This project requires the frog athletes to jump  over  the  river.  The  width  of  the  river  is  L  (1<=  L  <=  1000000000).  There  are  n  (0<=  n  <= 500000) stones lined up in a straight line from one side to the other side of the river. The frogs can only jump through the river, but they can land on the stones. If they fall into the river, they are out. The frogs was asked to jump at most m (1<=  m <= n+1) times. Now the frogs want to know  if  they  want  to  jump  across  the  river,  at  least  what  ability  should  they  have.  (That  is  the frog's longest jump distance).

Input

The input contains several cases. The first line of each case contains three positive integer L, n, and m. Then n lines follow. Each stands for the distance from the starting banks to the nth stone, two stone appear in one place is impossible.

Output

For each case, output a integer standing for the frog's ability at least they should have.

Sample Input

6 1 2
2
25 3 3
11 
2
18

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int p[500005];
int n,m;
bool is(int x)
{
    int i,cnt=0,d=0;
    if(p[1]>x)  return 0;
    for(i=1;i<=n;i++)
    {
        if(p[i]-d<=x&&p[i+1]-d>x)
        {
            cnt++;
            d=p[i];
        }
    }
    if(p[i]-d>x)  return 0;
    if(cnt<=m-1)   return 1;
    else return 0;
}
int main()
{
    int l,i,right,left,mid,ans;
    while(cin>>l>>n>>m)
    {
        for(i=1;i<=n;i++)
        {
            cin>>p[i];
        }
        p[n+1]=l;
        sort(p+1,p+n+1);
        left=0;right=l;
        while(left<=right)
        {
            mid=(left+right)/2;
            if(is(mid)) {ans=mid;right=mid-1;}
            else left=mid+1;
        }
        printf("%d\n",ans);
    }
    return 0;
}
posted @ 2013-05-16 16:23  forevermemory  阅读(159)  评论(0编辑  收藏  举报