70pts求调
查看原帖
70pts求调
968037
electronsky楼主2024/11/1 19:23
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int L,l,n,m,d[51000];
int bnum(int mid){
	int end=1,start=0,add=0;
	while(true){
		if(end>n)return add;
		if(d[end]-d[start]<mid){
			end++;add++;
		}
		else {
			start=end;
			end++;
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	
	cin>>L>>n>>m;
	if(n==0){
		cout<<L;
		return 0;
	}

	for(int i=1;i<=n;i++){
		cin>>d[i];//第n个石头与起点的距离 
	} d[n+1]=L;
	
	if(m==0){
		int min=1000000008;
		for(int i=1;i<=n+1;i++){
			 min=(d[i]-d[i-1]<min)?d[i]-d[i-1]:min;
		}
		cout<<min;
		return 0;
	}
	
	int l=0,r=L;
	while(true){
		int now;
		int mid=(l+r)>>1;
		now=bnum(mid);
		if(now>m){
			r=mid-1;
		}
		else if(now<m){
			l=mid+1;
		}
		else {
			while(bnum(mid+1)==now)mid++;
			cout<<mid;
			return 0;
		}
	} 

	return 0;
}
2024/11/1 19:23
加载中...