解题报告:luogu P2678 跳石头

题目链接:P2678 跳石头
很简单的二分查找,可悲的是我并不会。
不过题解贴心的写得很清楚(学会了套路)
二分一次判断一次,复杂度是(O(nlogl)),可以通过此题。

(Code:)

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int l,m,n;
int a[50005],ans;
int judge(int x)
{
	int cnt=0,last=0;
	for(int i=1;i<=n+1;i++)
	{
		if(a[i]-a[last]<x)
		{
			cnt++;
		}
		else last=i;
	}
	if(cnt>m) return 0;
	else return 1;
}
int main()
{
	scanf("%d%d%d",&l,&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	a[n+1]=l;
	int ll=1,r=l;
	while(ll<=r)
	{
		int mid=(ll+r)>>1;
		if(judge(mid)) ans=mid,ll=mid+1;
		else r=mid-1;
		//printf("%d %d
",mid,judge(mid));
	}
	printf("%d
",ans);
	return 0;
}

变量真卡人,开始写了两个(l),还对了一个点......

原文地址:https://www.cnblogs.com/tlx-blog/p/12293905.html