P10909 [蓝桥杯 2024 国 B] 立定跳远

算法:二分答案

思路

1.二分什么? 最远跳跃距离

2.二分边界:l = 1, r = 1e8

3.判断依据:自行添加的检测点数 cnt

  • if cnt <= m + 1 ,比给定的监测点数少,说明最远跳跃距离太大了,需要缩小 r = mid;
  • if cnt > m + 1 ,比给定的检测点数多,说明最远跳跃距离太小了,需要增大 l = mid + 1;

4.注意点

当前需要跳跃的距离是最远跳跃距离的整数倍时检查点数需要减一

mid = 3 -->当最远跳跃距离为 3 时

10 19 -->需要跳跃的距离为 9

9 / 3 = 3 -->由于是整数倍,因此检测点个数比实际情况多一个

10 13 16 19 --> 实际添加的检测点只有两个

C++代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1e5 + 10;

int len,n,m;
int a[N];

bool check(int mid) {   //当前的最远距离

	int cnt = 0;        //检查点数

	for(int i = 1; i <= n; i++) {

		int len = a[i] - a[i - 1];    //从当前点跳到下一个点的距离

		if(len > mid) {
			cnt += (len / mid - (len % mid == 0));   //当整数倍的时候 添加的检测点个数 - 1
		}
	}
	if(cnt <= m + 1) return true;
	else return false;

}
signed main() {

	scanf("%lld%lld",&n,&m);

	for(int i = 1; i <= n; i++) {
		scanf("%lld",&a[i]);
	}

	//二分边界

	int l = 1, r = 1e9;

	//二分对象 :最远跳跃距离

	while(l < r) {
		int mid = l + r >> 1;
		if(check(mid)) r = mid;    //最大的最小
		else l = mid + 1;
	}

	printf("%lld",l);

	return 0;

}
相关推荐
CoderYanger1 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
2401_832298101 天前
人机协同:AI时代全新工作与学习范式
职场和发展
童园管理札记1 天前
从政策驱动到课堂落地:2026年“人工智能+教育”全景解读与技术实践指南
人工智能·python·深度学习·职场和发展·学习方法
yuanxi2001 天前
卡塔尔能源公司LNG扩建项目首条生产线预计明年投运:大客户销售的5个判断
职场和发展·创业创新·学习方法
AI职业加油站2 天前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
倍利福猎头公司官方账号2 天前
2026具身智能赛道还火热吗?机器人人选该如何思考下半年的工作机会?
人工智能·面试·职场和发展·机器人·求职招聘
天真小巫2 天前
2026.9.20牛马日记
职场和发展
2401_832298102 天前
人工智能:重塑时代发展的核心科技力量
职场和发展
June bug2 天前
【HCIA- AI(正课)】4.1 华为智算方案
职场和发展
天真小巫3 天前
2026.9.19总结
职场和发展