100分了但额外的那个点没对
查看原帖
100分了但额外的那个点没对
701653
tcdxh楼主2022/10/24 17:56
#include <bits/stdc++.h>//  跳石头  
using namespace std;//	枚举距离,如果两块石头之间的距离小于mid那就拿走它 
				
int l,n,m,mid,ret; 
int a[50005];

int check(int x)
{
	int s = 0,sum = 0,t = 0;//t代表现在跳到哪里了 
	for(int i = 1; i <= n; i++)
	{
		if(a[i]-a[t]<x)//找到距离小于mid的 
		s++;//去掉一个石头
		else
		t = i; //下一块石头 
	}
	if(s>m)
	return 0;//超过可以移走的限制了 
	else
	return 1;
}

int main()
{
	cin>>l>>n>>m;
	for(int i = 1; i <= n; i++)
	cin>>a[i];
	a[n+1] = l;//这个才是终点 
	
	int i = 1,j = l;
	while(i<j)
	{
		mid = i+j+1>>1;
		if(check(mid))
		{
			i = mid;
			ret = mid;
		}
		else
		{
			j = mid-1;
		}
	}
	cout<<ret<<endl;
	
	return 0;
}
2022/10/24 17:56
加载中...