80分,2和10wa了,求求大佬帮忙找下错,感谢!
查看原帖
80分,2和10wa了,求求大佬帮忙找下错,感谢!
921678
likai2591楼主2023/2/23 15:17

rt

#include<bits/stdc++.h>
#define ull unsigned long long 
#define ll long long
using namespace std;

int l,n,k;
int a[100005];

bool judge(int x){
//	cout<<"============="<<x<<"=================="<<endl;
	int tot=0;
	int i=0,now=0;
	while(i<n){
		i++;
		if(a[i]-now>x){//如果大于二分的值,则看下中间需要增加几个路标,并将now设置在a[i]处
			tot+=(a[i]-now)/x;
			now=a[i];
		}else{//否则直接将now设置在a[i]处,其实可以不要这个else的,更加简洁一点,但是这样好理解
			now=a[i];
		}
//		cout<<"a["<<i<<"]="<<a[i]<<",tot="<<tot<<",now="<<now<<endl;
	}
	if(tot<=k)return true;//如果用的路标少于或等于给定的,说明这个还不是最小的
	else return false;
}


int main(){
	cin>>l>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	int left=1,right=l,mid,ans;
	while(left<=right){
		mid=(left+right)/2;
		if(judge(mid)){
			ans=mid;
			right=mid-1;
		}else{
			left=mid+1;
		}
	}
	cout<<ans;
	return 0;
}
2023/2/23 15:17
加载中...