求助
查看原帖
求助
941811
ngmhhy楼主2024/2/27 10:04
#include<bits/stdc++.h>
using namespace std;

bool f(int b);
int moving(int x);
int l,n,m,rock[50005]={1,0};
int main(){
	scanf("%d%d%d",&l,&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&rock[i+1]);
	} 
	rock[n+2]=l;
	int answer=moving(l); 
	printf("%d",answer);
} 
bool f(int b){
	int num=0,i=1;
	while(i<=n+1){
		if(rock[i+1]-rock[i]<=b){
			num++;
			i=i+2;
			
		}
		else   i++;
	}
	if(num>b)   return 0;
	else return 1;
}
int moving(int x){
	int l=0,r=x+1,mid;
	while(r>l){
		mid=(r+l)/2;
		if(f(mid))    l=mid;
		else    r=mid;
	}
	return l;
}
2024/2/27 10:04
加载中...