hh的蓝桥杯每日一题(二分)--立定跳远

蓝桥杯2024年第十五届决赛真题-立定跳远 - C语言网

这本质上是一个在路径上插入点,使相邻点距离不超过跳跃能力的问题。

我们可以把问题想象成:

  • 在数轴[0, aₙ]上有一条路径

  • 必须经过所有原始检查点

  • 可以在任意位置添加额外点

  • 相邻点距离 ≤ L(普通跳跃)或 ≤ 2L(使用技能的那次)

check函数:

对于给定的L,我们需要判断:

在最多添加m个额外点,且最多使用一次技能的情况下,能否从0跳到aₙ,并经过所有原始检查点?

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int n,m;
ll a[N];

bool check(ll l)
{
	ll cur=0;
	ll need=0;
	//计算不使用技能需要的额外点 
	for(int i=0;i<n;i++)
	{
		ll dist=a[i]-cur;
		if(dist>l)
		{
			need+=(dist+l-1)/l-1; 
		} 
		cur=a[i];
	}
	
	if(need<=m)return true;
	//计算使用技能最多能省多少点 
	ll max_save=0;
	cur=0;
	for(int i=0;i<n;i++)
	{
		ll dist=a[i]-cur;
		ll normal_need=max(0LL,(dist+l-1)/l-1);
		ll skill_need=max(0LL,(dist+2*l-1)/(2*l)-1);
		
		ll save=normal_need-skill_need;
		max_save=max(max_save,save);
		cur=a[i];
	}
	return (need-max_save)<=m;
}

int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>a[i];
	int left=1,right=a[n-1];
	while(left<right)
	{
		int mid=(left+right)>>1; 
		if(check(mid))right=mid;
		else left=mid+1;
		
	}
	cout<<left<<endl;
	return 0;
}
相关推荐
酉鬼女又兒1 小时前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
小则又沐风a1 小时前
[蓝桥杯 2014 省 AB] 蚂蚁感冒
算法·职场和发展·蓝桥杯
云泽8082 小时前
蓝桥杯算法精讲:从宏观角度重新认识递归
算法·职场和发展·蓝桥杯
蒸蒸yyyyzwd2 小时前
后端面试经验
面试·职场和发展
仰泳的熊猫3 小时前
题目2576:蓝桥杯2020年第十一届省赛真题-解码
数据结构·c++·算法·蓝桥杯
24白菜头5 小时前
第十五届蓝桥杯C&C++大学B组
数据结构·c++·笔记·学习·算法·leetcode·蓝桥杯
凌波粒5 小时前
LeetCode--704.二分查找(数组)
算法·leetcode·职场和发展
tobias.b5 小时前
计算机基础知识-操作系统
考研·面试·职场和发展
wengqidaifeng5 小时前
备战蓝桥杯----C/C++组 (一)数据结构与STL讲解(上):顺序表、链表、栈与队列——从手写到调用,一文搞懂四种线性结构
c语言·数据结构·蓝桥杯
酉鬼女又兒6 小时前
零基础入门前端JavaScript 基础语法详解(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·chrome·蓝桥杯