蓝桥杯第199题 扫地机器人 暴力优化 二分法 简单题 C++

news2024/11/19 3:36:55

题目

扫地机器人 - 蓝桥云课 (lanqiao.cn)icon-default.png?t=N7T8https://www.lanqiao.cn/problems/199/learning/?page=1&first_category_id=1&name=%E6%89%AB%E5%9C%B0%E6%9C%BA%E5%99%A8%E4%BA%BA

思路和解题方法

  1. 首先,通过cin语句输入了终点位置n和障碍物数量k。
  2. 使用一个数组a来存储k个障碍物的位置。
  3. 对障碍物位置进行排序,以便后续的二分搜索。
  4. 然后,定义了一个函数check,用于检查是否能够在给定的时间内到达终点。该函数采用二分搜索的思想。
  5. check函数中,首先初始化当前位置为起点0。然后遍历每一个障碍物:
    • 如果当前位置小于障碍物位置,则需要额外花费时间走过去,时间花费为(a[i] - pos - 1) * 2
    • 若剩余时间不足以到达当前障碍物,则返回false,表示无法在给定时间内到达终点。
    • 否则,更新当前位置为走过障碍物后的位置,即pos = a[i] + t / 2
  6. 当所有障碍物都走过后,判断当前位置是否小于终点位置n,若小于则返回false,表示无法在给定时间内到达终点;否则返回true,表示可以在给定时间内到达终点。
  7. 主函数使用二分搜索来找到最短时间。初始化二分搜索的左边界l为0,右边界r为2 * n。
  8. 在while循环中,计算中间值mid,并调用check函数判断是否能在mid时间内到达终点。
    • 若可以,则更新答案ans为mid,并将右边界r缩小为mid-1,继续搜索更短的时间。
    • 若不可以,则将左边界l扩大为mid+1,继续搜索更长的时间。
  9. 最终输出答案ans,即为最短时间到达终点的结果。

复杂度

        时间复杂度:

                O(log N * K)

        时间复杂度为O(logN * K),其中N为终点位置,K为障碍物数量。主要时间消耗在二分搜索中。

        空间复杂度

                O(K)

        空间复杂度为O(K),其中K为障碍物数量,因为需要使用一个数组来存储障碍物的位置。

c++ 代码

#include<iostream>
#include<algorithm>
using namespace std;

int n, k, a[100005]; // 定义变量n(终点位置)、k(障碍物数量)、a数组存放k个障碍物的位置
int ans; // 存放最终答案

// 检查是否能够在给定的时间内到达终点
bool check(int time)
{
    int pos = 0; // 当前位置初始化为起点
    for(int i = 0; i < k; ++i) // 遍历每一个障碍物
    {
        int t = time; // t表示剩余时间
        if(pos < a[i]) // 如果当前位置小于障碍物位置
            t -= (a[i] - pos - 1) * 2; // 则需要额外花费时间走过去
        if(t < 0) // 如果剩余时间不足以到达当前障碍物
            return false; // 返回false,表示无法在给定时间内到达终点
        pos = a[i] + t / 2; // 更新当前位置为走过障碍物后的位置
    }
    if(pos < n) // 如果所有障碍物都走过后,仍未到达终点
        return false; // 返回false,表示无法在给定时间内到达终点
    return true; // 否则返回true,表示可以在给定时间内到达终点
}

int main()
{
    cin >> n >> k; // 输入终点位置n和障碍物数量k
    for(int i = 0; i < k; i++)
        cin >> a[i]; // 输入k个障碍物的位置
    sort(a, a + k); // 对障碍物位置进行排序
    int l = 0, r = 2 * n; // 初始化二分搜索的左右边界

    while(l <= r) // 二分搜索
    {
        int mid = l + (r - l) / 2; // 取中间值
        if(check(mid)) // 能够在mid时间内到达终点
            ans = mid, r = mid - 1; // 更新答案并缩小右边界
        else
            l = mid + 1; // 否则扩大左边界
    }

    cout << ans << endl; // 输出答案
    return 0;
}

未优化的代码 暴力 time从0~2*n

	for(int i = 0;i<=2*n;i++)
    {
        if(check(i)){
            ans = i;
            break;
        }
    }

时间对比

我的文档里面也有许多二分(双指针)题目,可供大家参考作答。

双指针_冷yan~的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/jgk666666/category_12470278.html

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1269977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础也可以学编程,分享中文编程工具开发软件

零基础也可以学编程&#xff0c;分享中文编程工具开发软件 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如图这个实例就是用…

MySQL 插入数据报错 Incorrect string value

当在sys_dict_data表中执行插入语句&#xff1b; insert into sys_dict_data values(1, 1, 男, 0, sys_user_sex, , , Y, 0, admin, sysdate(), , null, 性别男);报错信息如下&#xff1a; insert into sys_dict_data values(1, 1, 男, …

记录一次现网问题排查(分享查域名是否封禁小程序)

背景&#xff1a; 收到工单反馈说现网业务一个功能有异常&#xff0c;具体现象是tc.hb.cn域名无法访问&#xff0c;客户地区是河南省&#xff0c;这里记录下排查过程和思路。 首先梳理链路 客户端域名 tc.hb.cn cname—> domainparking-dnspod.cn(新加坡clb)—> snat—&…

Mysql DDL语句建表及空字符串查询出0问题

DDL语句建表 语法&#xff1a; create table 指定要建立库的库名.新建表名 &#xff08;... 新建表的字段以及类型等 ...&#xff09;comment 表的作用注释 charset 表编译格式 row_format DYNAMIC create table dev_dxtiot.sys_url_permission (id integer …

深度学习毕设项目 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

基于深度学习的表情动作单元识别综述

论文标题&#xff1a;基于深度学习的表情动作单元识别综述 作者&#xff1a;邵志文1&#xff0c;2&#xff0c;周 勇1&#xff0c;2&#xff0c;谭 鑫3&#xff0c;马利庄3&#xff0c;4&#xff0c;刘 兵1&#xff0c;2&#xff0c;姚 睿1&#xff0c;2 发表日期&#xff1a…

python爬虫AES案例:某招聘网站

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cua2Fuemh1bi5jb20vc2VhcmNoLz9xdWVyeT1weXRob24mdHlwZT0w’) 拿到网址…

sqlserver12 数据库的安装步骤

点击独立安装或向现有安装添加功能 点击下一步&#xff1a; 点击我接受许可条款&#xff0c;然后点击下一步&#xff1a; 点击包含SQL server产品更新&#xff0c;然后点击下一步&#xff1a; 继续点击下一步&#xff1a; 点击SQL server&#xff08;功能安装&#xff09; 最后…

Thrift RPC Java、Go、PHP使用例子

文章目录 1、Thrift RPC介绍1.1、Protocol 支持的数据传输协议1.2、Transport 支持的数据传输方式1.3、Server 支持的服务模型1.4、IDL语法数据类型1.5、开发步骤 2、接口定义文件2.1、创建接口定义文件2.2、生成对应平台语言代码2.2.1、下载生成工具2.2.2、生成各平台语言代码…

Spring-事务支持

目录 一、事务概述 二、引入事务场景 三、Spring对事务的支持 Spring实现事务的两种方式 声明式事务之注解实现方式 1.在Spring配置文件中配置事务管理器 2. 在Spring配置文件引入tx命名空间 3. 在Spring配置文件中配置“事务注解驱动器”&#xff0c;通过注解的方式控…

一文了解什么是GIS

地理信息系统&#xff08;GIS&#xff09;是捕捉、存储、分析和呈现空间数据的强大工具。通过将地理信息与其他数据源相结合&#xff0c;GIS为有效决策至关重要的模式、关系和趋势提供了有价值的见解。 一、GIS的关键概念 1.空间数据&#xff1a;GIS依赖于空间数据&#xff0c…

RabbitMQ消息模型之Routing-Direct

Routing Direct 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;不能是任意…

记录创建粒子的轻量级JavaScript库——particles.js(可用于登录等背景显示)

文章目录 前言一、下载particles.js二、引入particles.js并使用三、配置数据说明如有启发&#xff0c;可点赞收藏哟~ 前言 本文记录使用创建粒子的轻量级JavaScript库 particles.js 可用于登录等背景显示 一、下载particles.js 先下载particles.js库&#xff0c;放在项目libs…

504. 七进制数

这篇文章会收录到 : 算法通关第十三关-青铜挑战数学基础问题-CSDN博客 七进制数 描述 : 给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 题目 : LeetCode 504. 七进制数 : 504. 七进制数 分析 : 我们先通过二进制想一下7进制数的变化特…

剑指 Offer(第2版)面试题 9:用两个栈实现队列

剑指 Offer&#xff08;第2版&#xff09;面试题 9&#xff1a;用两个栈实现队列 剑指 Offer&#xff08;第2版&#xff09;面试题 9&#xff1a;用两个栈实现队列解法1&#xff1a;模拟拓展&#xff1a;用队列模拟栈 剑指 Offer&#xff08;第2版&#xff09;面试题 9&#xf…

Flutter 控件查阅清单

为了方便记录和使用Flutter中的各种控件&#xff0c;特写此博客以记之&#xff0c;好记性不如烂笔头嘛&#xff1a;&#xff09; 通过控件的首字母进行查找&#xff0c;本文会持续更新 控件目录 AAppBar BCContainerColumn &#xff08;列&#xff09; DDivider (分割线) EElev…

数据结构day4作业

1.单链表任意位置删除 datetype pos;printf("please input pos");scanf("%d",&pos);headdelete_all(head,pos);Output(head);Linklist delete_all(Linklist head,datetype pos) {if(pos<1||pos>length(head)||headNULL)return head;if(head->…

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

目录 背景 实现RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入 RecyclerView 第三步、新建一个adapter 第四步、在activity中初始化绑定adapter即可 实现item及其多个子组件点击事件监听 第一步、 适配器中创建监听对象 第二步、适配器中绑定监听…

【Git】ssh: connect to host github.com port 22: Connection refused

错误展示&#xff1a; 错误原因&#xff1a;22端口被拒绝访问 解决办法 在~/.ssh/config文件&#xff08;有就直接编辑&#xff0c;没有就创建&#xff09;里添加以下内容&#xff0c;这样ssh连接GitHub的时候就会使用443端口。 Host github.comHostname ssh.github.comPort…

mac 聚焦搜索不显示

我是连搜索框都不显示&#xff0c;不是搜索结果显示异常 点右上角的搜索按钮都毫无反应 我检查过快捷键之类的设置&#xff0c;都正常&#xff0c;最后是通过删除文件解决的 cd ~/Library/Preferences/ rm com.apple.Spotlight.plist 重启 mac 参考 Spotlight Search Not W…