【C++】B2066救援题目分析和解决讲解


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯 题目
  • 💯 题目分析
    • 每个屋顶计算的元素
  • 💯 思路解析
    • 1. **读取输入**
    • 2. **计算屋顶时间**
    • 3. **结果精确取整**
  • 💯 完整解决代码
  • 💯 突出问题分析
    • 1. **选择正确的数据类型**
      • 解决方案
    • 2. **取整的位置**
      • 优化思路
    • 3. **边界情况处理**
  • 💯 复杂度分析
    • 1. **时间复杂度**
    • 2. **空间复杂度**
  • 💯 学习收获和应用
  • 💯 小结


在这里插入图片描述


💯前言

  • 在本文中,我们将对一道来自洛谷编程题目“B2066 救援”进行全面分析和解决,包括题目内容释义,解决思路,以及代码运行中的更新与优化过程。对于解题过程中出现的问题,我们进行了不同方案比较,并给出了细致的解析和解决方式。通过本文,读者将能学习如何分析一道复合题,如何检查代码中的问题,以及如何使解决方案更加精准和高效。
    以下是我们对题目《B2066 救援》的分析和全过程解决。
    C++ 参考手册
    在这里插入图片描述

💯 题目

B2066 救援
在这里插入图片描述

救援

题目描述

救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标。

和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。

在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度 50 50 50 米 / 分钟驾向下一屋顶,达到一屋顶后,救下其上的所有人,每人上船 1 1 1 分钟,船原路返回,达到大本营,每人下船 0.5 0.5 0.5 分钟。假设原点与任意一个屋顶的连线不突过其它屋顶。

输入格式

第一行,一个整数,表示屋顶数 n n n

接下来会有 n n n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分开。

输出格式

一行,救援需要的总时间,精确到分钟(向上取整)。

样例 #1

样例输入 #1

1
30 40 3

样例输出 #1

7

💯 题目分析

该题目基本问题背景是:在直角坐标系中,大本营作为原点,救生船需要去回不同屋顶,将上面的人救回大本营,每个屋顶的坐标和人数由输入确定。救援时间由下列团队操作减反处理:

每个屋顶计算的元素

  1. 每个屋顶和大本营的相实坐标跑,在平面坐标系中远离:
    Distance = x 2 + y 2 \text{Distance} = \sqrt{x^2 + y^2} Distance=x2+y2

  2. 进出和退场时间:
    Travel Time (Round Trip) = 2 ⋅ Distance 50 \text{Travel Time (Round Trip)} = 2 \cdot \frac{\text{Distance}}{50} Travel Time (Round Trip)=250Distance

  3. 每个人上船和下船的时间:
    Load Time = People ⋅ ( 1 + 0.5 ) = People ⋅ 1.5 \text{Load Time} = \text{People} \cdot (1 + 0.5) = \text{People} \cdot 1.5 Load Time=People(1+0.5)=People1.5

总时间实际上为:
Total Time per Roof = 2 ⋅ Distance 50 + People ⋅ 1.5 \text{Total Time per Roof} = 2 \cdot \frac{\text{Distance}}{50} + \text{People} \cdot 1.5 Total Time per Roof=250Distance+People1.5

最终,精确到分钟,需要向上取整:
Final Time = ⌈ Total Time per Roof ⌉ \text{Final Time} = \lceil \text{Total Time per Roof} \rceil Final Time=Total Time per Roof


💯 思路解析

将解题分为下列步骤:

1. 读取输入

  • 第一行读取 n n n,表示屋顶总数。
  • 接下来的 n n n 行读取每个屋顶的坐标 ( x , y ) (x, y) (x,y) 和人数 r r r

2. 计算屋顶时间

  • 根据坐标计算屋顶和大本营的相实距离:
    Distance = x 2 + y 2 \text{Distance} = \sqrt{x^2 + y^2} Distance=x2+y2
  • 根据上面公式计算每个屋顶的时间并精确到分钟:
    Time = ( Distance / 50 ) × 2 + r × 1.5 \text{Time} = (\text{Distance} / 50) \times 2 + r \times 1.5 Time=(Distance/50)×2+r×1.5

3. 结果精确取整

  • 将所有屋顶的时间紧总和,并通过向上取整。

💯 完整解决代码

使用 C++ 实现:

#include <iostream>
#include <cmath>
using namespace std;int main() {int n; // 屋顶数量cin >> n;double total_time = 0; // 总时间初始化为 0for (int i = 0; i < n; i++) {double x, y; // 坐标int r;       // 人数cin >> x >> y >> r;// 计算到屋顶的距离double distance = sqrt(x * x + y * y);// 计算单个屋顶所需时间double time = (distance / 50) * 2 + r * 1.5;// 紧总时间total_time += ceil(time);}// 输出总时间cout << (int)ceil(total_time) << endl;return 0;
}

在这里插入图片描述

在这里插入图片描述


💯 突出问题分析

在实现过程中,出现过一些更新和优化,重点如下:

1. 选择正确的数据类型

调查发现,如果屋顶坐标和距离用 int,在解析输入为浮点数时,将会丢失精度。

解决方案

将坐标声明为浮点型:

double x, y;

2. 取整的位置

有些方案在屋顶时间总和时才取整,导致粘进值问题。

优化思路

在计算单个屋顶时就取整:

total_time += ceil(time);

3. 边界情况处理

  • 如果输入 n = 0 n = 0 n=0,必须特别处理:
if (n == 0) {cout << 0 << endl;return 0;
}
  • 如果人数为 0 0 0,只计算距离时间,不要含及上船和下船。

💯 复杂度分析

1. 时间复杂度

  • 输入为 n n n 个屋顶,每个屋顶计算距离和时间,复杂度为:
    O ( n ) O(n) O(n)

2. 空间复杂度

  • 只使用常数量的变量,空间复杂度为:
    O ( 1 ) O(1) O(1)

💯 学习收获和应用

通过该题目,我们学习到如下点:

  1. 在复杂场景中分解问题的思路:通过分解每个屋顶的时间,将复杂问题分解为许多小问题。
  2. 选择正确的数据类型:特别是处理浮点数时,需要保证计算精度。
  3. 处理边界情况:在突出输入时,须要考虑特殊情况,如屋顶数量为 0 或人数为 0。

💯 小结

通过该题目解决,我们基于 C++ 给出了进一步的优化,包括类型选择、取整位置和边界情况处理。这些优化不仅能解决本题,对于复杂程序进一步深入优化也具有往往运用实际意义。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


在这里插入图片描述


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

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

相关文章

springboot创建web项目

一、创建项目 二、导入依赖&#xff08;pom.xml&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

RAID5原理简介和相关问题

1、RAID5工作原理 2、RAID5单块硬盘的数据连续吗&#xff1f; 3、RAID5单块硬盘存储的是原始数据&#xff0c;还是异或后的数据&#xff1f; 4、RAID5的分块大小 ‌RAID5的分块大小一般选择4KB到64KB之间较为合适‌。选择合适的分块大小主要取决于以下几个考量因素&#xff1…

重温设计模式--模板方法模式

文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义&#xff1a;定义一个操作中的算法骨架&#xff0c;而降一些步骤延迟到子类中。模板方法使得…

Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析

目录 背景 分析 解决方案 背景 正常情况下&#xff0c;会从Openai Realtime api Sever收到正常的json数据,但是当返回音频数据时&#xff0c;总会返回非json数据。这是什么问题呢&#xff1f; 分析 期望的完整响应数据如下&#xff1a; {"session": {"inp…

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读 今天&#xff0c;正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴&#xff0c;可扩展至12轴的运动控制…

SpringBoot状态机

Spring Boot 状态机&#xff08;State Machine&#xff09;是 Spring Framework 提供的一种用于实现复杂业务逻辑的状态管理工具。它基于有限状态机&#xff08;Finite State Machine, FSM&#xff09;的概念&#xff0c;允许开发者定义一组状态、事件以及它们之间的转换规则。…

基于图注意力网络的两阶段图匹配点云配准方法

Two-stage graph matching point cloud registration method based on graph attention network— 基于图注意力网络的两阶段图匹配点云配准方法 从两阶段点云配准方法中找一些图匹配的一些灵感。文章提出了两阶段图匹配点云配准网络&#xff08;TSGM-Net&#xff09; TSGM-Ne…

uniapp跨平台开发---webview调用app方法

1.app端实现 注意:为了实现实时通信,app端页面是.nvue 代码实现 <template><view class"content"><view class"web-view"><web-view class"web-view" :src"url" ref"webview" onPostMessage"o…

【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38654 在当今时代背景下&#xff0c;社会发展日新月异&#xff0c;人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…

生产看板管理系统涵盖哪些方面

嘿&#xff0c;各位搞生产管理的朋友&#xff0c;肯定都碰到过些麻烦事儿吧。我就寻思着&#xff0c;能不能弄出个 “明明白白” 的工作场地呢&#xff1f;让员工和管理人员都能随时查查生产进度&#xff0c;一发现生产里有啥问题就能立马知道。 生产进度不好追踪生产过程不清…

密码学期末考试笔记

文章目录 公钥加密之前的部分 (非重点&#xff0c;关注工具怎么用&#xff0c;和性质)一、对称加密 (symmetric ciphers)1. 定义 二、PRG (伪随机数生成器)1. 定义2. 属性 三、语义安全 (Semantic Security)1. one-time key2. 流密码是语义安全的 四、分组密码 (Block Cipher)1…

workman服务端开发模式-应用开发-vue-element-admin挂载websocket

一、项目根目录main.js添加全局引入 import /utils/websocket 二、在根目录app.vue 中初始化WebSocket连接 <template><div id"app"><router-view /></div> </template><script>import store from ./store export default {n…

我的 2024 年终总结

2024 年&#xff0c;我离开了待了两年的互联网公司&#xff0c;来到了一家聚焦教育机器人和激光切割机的公司&#xff0c;没错&#xff0c;是一家硬件公司&#xff0c;从未接触过的领域&#xff0c;但这还不是我今年最重要的里程碑事件 5 月份的时候&#xff0c;正式提出了离职…

信创源代码加密的答案:信创沙箱

在信息化与工业化融合创新&#xff08;信创&#xff09;的背景下&#xff0c;企业面临着前所未有的数据安全挑战。SDC沙盒技术以其独特的隔离和保护机制&#xff0c;为信创环境提供了强有力的支持。以下是SDC沙盒在信创支持方面的优势&#xff0c;这些优势体现了其在保护企业数…

Leecode刷题C语言之根据第k场考试的分数排序

执行结果:通过 执行用时和内存消耗如下&#xff1a; int gk 0;int compare(const void* a, const void* b) {int* ua *(int**)a;int* ub *(int**)b;return ub[gk] - ua[gk]; }int** sortTheStudents(int** score, int scoreSize, int* scoreColSize, int k, int* returnSiz…

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…

自定义一个maven骨架 | 最佳实践

自定义一个maven骨架 | 最佳实践 目的&#xff1a;将一个多模块项目的基础结构制作成maven骨架&#xff0c;实现项目的快速构建&#xff0c;风格统一 公司内部会制定自己的规范及包结构。当创建新项目的时候就需要选择骨架&#xff0c;即可生成包结构。 Archetype都为不同类型的…

CTFHUB-web进阶(Bypassdisable_function)

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…

workman服务端开发模式-GatewayWorker的使用

一、GatewayWorker介绍 Workerman是一个使用PHP开发的高性能组件&#xff0c;用于构建高性能的异步并发TCP、UDP、Unix Socket、HTTP、Websocket服务。 GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架&#xff0c;实现了单发、群发、广播等接口&#xff0c;内置了…