蒟蒻求助(悬赏关注)
查看原帖
蒟蒻求助(悬赏关注)
857359
ztj000楼主2023/2/12 20:07

样例过了,但只有40分

#include<bits/stdc++.h>
using namespace std;
int l,n,k,m[100001];//m[i]代表第i个路标处在什么位置
int check(int p)//检查是否可行
{
	int lu=0;//ti表示需要加的路标数
	for(int i=1;i<=n;++i) lu+=(m[i]-m[i-1])/(p+1);
	if(lu<=k) return 1;
	else return 0;
}
int erfen()//二分答案
{
	int t=0,w=l,k;
	while(t<=w)
	{
		k=t+(w-t)/2;
		if(check(k)) w=k-1;
		else t=k+1;
	}
	return t;
}
int main()
{
	cin>>l>>n>>k;
	for(int i=1;i<=n;++i) cin>>m[i];
	sort(m+1,m+n+1);//排序
	cout<<erfen()+1;
	return 0;
}
2023/2/12 20:07
加载中...