(二分)730. 机器人跳跃问题

简介: (二分)730. 机器人跳跃问题

题目链接

AcWing 730. 机器人跳跃问题 - AcWing


一些话

// 这里我用了浮点二分,mid = (l + r) / 2,最后再手动写了个向上取整的句子,所以没有wa,可能是题目数据太弱。

切入点

游戏目标是到达第 N个建筑,在这个过程中能量值不能为负数个单位。

现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏?

机器人在满足条件的情况下能通过的建筑数量与初始能量值正相关,符合二分特性


流程

//二分check部分是个小模拟,按照模拟步骤写伪代码,然后等价替换

// 递推,枚举每一个台阶,然后对mid操作,每次操作后判断mid是否跳出了0~1e5的区间,小于0return false,大于0return true;

   // 枚举结束了后return true;

等价替换后的伪代码:

// 写check函数伪代码(流程)的时候可以发现,不管mid和f[i]的大小关系如何,最终都是mid = 2 * mid - f[i];

// 因此写代码时就不用再分情况讨论,只要写一个mid = 2 * mid - f[i] 就可以了,然后还有一个剪枝操作,

// 因为f[i]max = 1e5,所以只要mid>1e5,直接return true就可以了


输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。


这个我是真无语了,一直纠结yxc代码哪里用了向上取整,其实这道题不用浮点二分的话得到的答案肯定是大于浮点二分的精确小数答案的,所以用整数二分本身就是一个向上取整了


套路

二分的取整

①向上取整 mid的表示要写成

if(merge[mid] < x) l = mid + 1对应的写法

②向下取整

if(merge[mid] > x) r = mid - 1对应的写法

merge是将mid转为mid对应的x值的函数

比如数组指针转值

题目条件与对应答案

// 11:11 ~11:14读题
// ~24 ac
// 向上取整 mid的表示要写成l + r + 1 >> 1即可,向下取整 mid = l + r >> 1
// 这里我用了浮点二分,mid = (l + r) / 2,最后再手动写了个向上取整的句子,所以没有wa,可能是题目数据太弱。
// 已经申请了加强数据了
//二分check部分是个小模拟,按照模拟步骤写伪代码,然后等价替换
// 写check函数伪代码(流程)的时候可以发现,不管mid和f[i]的大小关系如何,最终都是mid = 2 * mid - f[i];
// 因此写代码时就不用再分情况讨论,只要写一个mid = 2 * mid - f[i] 就可以了,然后还有一个剪枝操作,
// 因为f[i]max = 1e5,所以只要mid>1e5,直接return true就可以了
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 1e5 + 10;
double f[N],n,maxn;
bool check(double mid){
    // 递推,枚举每一个台阶,然后对mid操作,每次操作后判断mid是否跳出了0~1e5的区间,小于0return false,大于0return true;
    // 枚举结束了后return true;
    // 可推导出mid = 2 * mid - f[i];
    // 
    for(int i = 1;i <= n;i++){
        if(mid >= f[i]) mid += mid - f[i];
        else mid -= (f[i] - mid);
        if(mid < 0) return false;
    }
    return true;
}
int main(){
    cin >> n;
    for(int i = 1;i <= n;i++) {
        scanf("%lf",&f[i]);
        maxn = max(f[i],maxn);
    }
    double l =  1,r = maxn;
    while(r - l > 1e-3){
        double mid = (l + r) / 2;
        if(check(mid)) r = mid;
        else l = mid;
    }
    if(int(l * 10) % 10) l += 1;
    cout << (int)l << endl;
    return 0;
}
目录
相关文章
|
算法 机器人 C语言
【二分查找】分巧克力、机器人跳跃、数的范围
开始准备蓝桥杯啦!这是计划的一部分,每天都会更新一个专题的内容,内容参考自acwing蓝桥杯辅导课,有兴趣的uu们也可以自行观看
116 0
|
7月前
|
算法 机器人
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
|
机器人
二分法求机器人跳跃问题
二分法求机器人跳跃问题
104 0
|
2月前
|
人工智能 自然语言处理 算法
具身智能高校实训解决方案 ----从AI大模型+机器人到通用具身智能
在具身智能的发展历程中,AI 大模型的出现成为了关键的推动力量。高校作为培养未来科技人才的摇篮,需要紧跟这一前沿趋势,开展具身智能实训课程。通过将 AI 大模型与具备 3D 视觉的机器人相结合,为学生搭建一个实践平台。
203 64
|
11天前
|
机器学习/深度学习 人工智能 算法
人工智能与机器人的结合:智能化世界的未来
人工智能与机器人的结合:智能化世界的未来
99 32
|
17天前
|
人工智能 自然语言处理 机器人
机器人迈向ChatGPT时刻!清华团队首次发现具身智能Scaling Laws
清华大学研究团队在机器人操作领域发现了数据规模定律,通过大规模数据训练,机器人策略的泛化性能显著提升。研究揭示了环境和对象多样性的重要性,提出了高效的數據收集策略,使机器人在新环境中成功率达到约90%。这一发现有望推动机器人技术的发展,实现更广泛的应用。
69 26
|
2月前
|
算法 机器人 语音技术
由通义千问驱动的人形机器人具身智能Multi-Agent系统
申昊科技人形机器人小昊,集成通义千问多模态大模型的具身智能系统,旨在讲解销售、迎宾表演等场景。机器人通过语音、动作等方式与用户互动,利用云端大语言模型处理自然语言,结合视觉、听觉等多模态感知技术,实现流畅的人机对话、目标追踪、展厅讲解等功能。
236 4
由通义千问驱动的人形机器人具身智能Multi-Agent系统

热门文章

最新文章