头像

欢迎来到我的博客

分享题解与总结

P2678跳石头

image

思路:

二分答案

1.最优解

2.跳跃距离设置的越大,移除的石头数越多——单调性

3.向右找——最大值

4.lst(last)标识:上一块不移走的岩石 的下标

#include<bits/stdc++.h>
#define MAXN 50005
using namespace std;
int L,N,M,d[MAXN],lft,rgt,mid; 

bool check(int x)
{
	int lst=0,cnt=0;
	for(int i=1;i<=N;++i){
		if(d[i]-d[lst]<x)//这一块岩石需要移走 
			cnt++;
		else//上一块不移走的岩石编号是i
			lst=i;
	}
	if(L-d[lst]<x)
		cnt++;
	return cnt<=M;
}

int main()
{
	cin>>L>>N>>M;
	for(int i=1;i<=N;++i)
        scanf("%d",&d[i]);
    
	lft=1,rgt=L;
	while(lft<rgt){
		mid=(lft+rgt+1)/2;
		if(check(mid))
            lft=mid;
		else
            rgt=mid-1;
	}
	cout<<rgt;
	return 0;
}
posted @ 2026-02-10 20:13  king_steph1209  阅读(11)  评论(0)    收藏  举报