hdoj 4004 The Frog's Games(二分+搜索+剪枝)

             昨天比赛,我做出来了……这说明一个啥问题呢——这道题很水……

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[500001];
int L, n;
bool Check(  int mid, int m)
{
	int i;
	int dis=0;
	if( mid<a[0]) return 0;
	for(i=1; i<=n; i++)
	{
		if( mid<a[i]-dis && mid>=a[i-1]-dis)
		{
			m--;
			dis=a[i-1];
		}
		if( mid<a[i]-dis ) return 0;
		if( m<=0) return 0;     
	}
	if( a[n]-dis<=mid )
		return 1;
	else return 0;
}
int main()
{ 
	int m;
	int start, end, mid;
	int ans;
	int i;
	while(scanf("%d %d %d",&L, &n, &m)!=EOF )
	{
		
		for(i=0; i<n; i++)
			scanf("%d",a+i);
		a[n]=L;
		sort(a, a+n);
		start=0; end=L;
		while(start<=end)
		{
			mid=(start+end)/2;
			if( Check(mid, m) )
			{
				ans=mid;
				end=mid-1;
			}
			else start=mid+1;
		}
		printf("%d\n", ans);
	} 
}


你可能感兴趣的:(hdoj 4004 The Frog's Games(二分+搜索+剪枝))