20分求助—《听取WA声一片》
查看原帖
20分求助—《听取WA声一片》
681514
Arthi楼主2024/3/27 17:32
#include <bits/stdc++.h>
using namespace std;

int l,n,m,maxlen=-1;
int a[50002]={};
int main(){
	a[0]=0;
	cin>>l>>n>>m;
	a[n+1]=l;
	for(int i=1; i<=n; i++)cin>>a[i];
	for(int i=0; i<=n; i++){
		maxlen=max(maxlen,(a[i+1]-a[i]));
	}
	int mid,le=1,ri=maxlen;
	int cnt=0;
	while(le<ri){
		//cout<<"l="<<le<<" "<<"r="<<ri<<endl;
		cnt=0;
		mid=(le+ri)/2;
		//cout<<"mid="<<mid<<endl;
		for(int i=0; i<=n; i++){
			if((a[i+1]-a[i])==mid)continue;
			cnt+=(a[i+1]-a[i])/mid;
		}
		if(le+1==ri){
			cnt=0;
			for(int i=0; i<=n; i++){
				if((a[i+1]-a[i])==le)continue;
				cnt+=(a[i+1]-a[i])/le;
			}
			if(cnt<=m){
				cout<<le;
				return 0;
			}else{
				cout<<ri;
				return 0;
			}
		}
		if(cnt>m){
			le=mid+1;
		}else if(cnt<m){
			ri=mid-1;
		}else{
			le=mid;
		}
		if(le==ri){
		    cout<<le;
		    return 0;
		}
	}
	cout<<le;
	return 0;
} 
2024/3/27 17:32
加载中...