题解(二分算法)

刘嘉柚  •  3个月前


原来提高组真题也没那么难,这题就是2015年提高组第1题

#include<bits/stdc++.h>
#define N 50005
using namespace std;
int n,m,l,a[N];
bool check(int d){  //判断距离d能移走的石头数是不是小于等于M
	int t=0,cnt=0;
	for(int i=1;i<=n;i++){
		if(a[i]-t<d) cnt++;
		else t=a[i];
	}
	if(l-t<d) cnt++;
	return cnt<=m;
}
int main()
{
	cin>>l>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int left=1,right=l+1,mid;  //二分查找
	while(left+1<right){
		mid=(left+right)>>1;
		if(check(mid)) left=mid;
		else right=mid;
	}
	cout<<left;
	return 0; 
}

Comments:

抄题解的吃#


刘嘉柚  •  3个月前

请问吃什么


魈凯KBS  •  3个月前