二分30分求助!!!
查看原帖
二分30分求助!!!
545507
pl_cosmonaut楼主2021/12/11 23:40

code

#include<bits/stdc++.h>
using namespace std;

int L,n,m;
int MIN=1000000001,MAX=0;
int a[55000];

bool judge(int mini){
	int move=0;
	int w=0;
	for(int i=1;i<=n+1;i++){
		if(a[i]-w<mini){
			move++;
		}
		else{
			w=a[i];
		}
	}
	return move<=m;
}
int find(int l,int r){
	int mid;
	while(l+1<r){
		mid=(l+r)>>1;
		
		
		if(judge(mid)==false) r=mid-1;
		else l=mid;
		
	}
	return l;
}

int main(){
	cin>>L>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		MAX=max(a[i],MAX);
		MIN=min(a[i],MIN);
	}
	a[n+1]=L;
	cout<<find(MIN,MAX);
	return 0;
}

2021/12/11 23:40
加载中...