【洛谷】P1223 排队接水(思路详解)

news2024/12/28 20:47:38

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

int main()
{
    //1. 从标准输入读取人数n,对应题目中在水龙头前排队接水的人数
    int n;  
    cin >> n;

    //2. 定义数组N,用于存储每个人接水的时间,数组大小设定为1000
    //(可根据实际情况容纳足够多的人,不过实际使用个数由n决定)
    //这里的N[i]就对应题目中的Ti,表示第i个人的接水时间
    int N[1000];  
    for (int i = 0; i < n; i++)
        cin >> N[i];

    //3. 定义数组T,用于复制数组N中的元素
    //目的是对复制后的数组进行排序等操作,同时保持原数组N不变,方便后续查找原始顺序。
    //本质上,T数组存储的也是每个人的接水时间数据,只是后续会对它进行排序处理来确定排队顺序
    int T[1000];  
    for (int i = 0; i < n; i++)
        T[i] = N[i];

    //4. 使用标准库中的sort函数对数组T进行排序(从小到大排序)
    //按照接水时间从小到大排列这些人的顺序
    //因为按照贪心算法的思想,接水时间短的人先接水可以使总的平均等待时间最短
    //(sort函数需要包含<algorithm>头文件)
    //这里传入的参数表示要排序的范围是从T数组的首地址到第n个元素的地址
    sort(T, T + n);  

    //5. 定义一个双精度浮点数sum,用于累加计算所有人等待时间的总和,初始化为0
    //后续会根据确定的排队顺序来计算总的等待时间
    //最终用它除以人数n得到平均等待时间
    double sum = 0;  

    //6. 定义临时数组temp,同样大小为1000
    //用于辅助后续查找每个人接水时间在原数组中的原始位置等操作,初始时将N数组元素复制过来
    //这样可以基于这个临时数组去查找每个人最初的序号
    //(对应题目要求输出的排队顺序是基于最初输入的人员顺序)
    int temp[1000];  
    for (int i = 0; i < n; i++)
        temp[i] = N[i];

    //7. 开始外层循环,遍历排序后的数组T
    //以按照接水时间从小到大的顺序确定排队顺序,并计算相应的等待时间以及累加总和
    for (int i = 0; i < n; i++)
    {
        //8. 在内层循环中,通过逐个比较查找当前排序后数组T中元素(即当前接水时间)
          在原数组temp中的原始位置(下标),初始j为0
    //这个原始位置就对应着最初输入的第几个接水人的序号,找到这个序号才能按要求输出排队顺序
        int j = 0;  
        while (temp[j]!= T[i])
            j++;

        //9. 找到元素在temp数组中的位置后,将该位置的元素值置为0
        //避免后续重复查找(标记已处理过),同时这一步也是为了配合查找逻辑的正确性
        //确保每次都能准确找到下一个未处理的对应元素位置
        temp[j] = 0;  

        //10. 输出该元素在原数组中的位置序号
    (因为数组下标从0开始,所以要加1输出,符合日常计数习惯,也就是输出第几个接水人先接水)
        //这里输出的顺序就是按照平均等待时间最短的排队顺序来输出的
        cout << j + 1;  

        //11. 如果当前不是最后一个元素,就在输出位置序号后添加一个空格
              用于隔开不同接水人的序号,使输出格式更清晰
        if (i!= n - 1)
            cout << " ";  

        //12. 根据题目要求计算加权总和,权重是(n - i - 1)
        //表示当前这个人前面有(n - i - 1)个人需要等待他接水
        //所以每个人的等待时间就是他的接水时间乘以前面等待的人数,这里乘以当前元素值
         (转换为浮点数类型)累加到sum中
        //用于后续计算平均等待时间
        sum += T[i] * (n - i - 1) * 1.0;  
    }

    //13. 输出换行符,进行换行操作,使后面输出的平均等待时间与前面排队顺序的输出分行显示
    cout << '\n';  

    //14. 使用fixed和setprecision(2)控制输出格式,使得后面输出的平均等待时间保留两位小数
    //然后输出计算得到的平均等待时间
    //满足题目要求的第二行输出内容,即输出这种排列方案下的平均等待时间
    cout << fixed << setprecision(2) << sum / (n * 1.0);  

    return 0;
}

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

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

相关文章

WebDAV服务不能上传大文件,文件超过50M报错[0x800700DF]怎么办?

这个问题需要分别从服务端和客户端解决。 1.Windows客户端 解除50M文件限制&#xff0c;Windows访问Webdav服务时&#xff0c;大于50M文件提示错误[错误:0x800700DF] 部署了webdav&#xff0c;Windows10映射网络磁盘&#xff0c;传输文件超过大约50MB的文件会弹出“0x800700…

计算机视觉:学习指南

一、引言 计算机视觉作为人工智能领域的一个重要分支&#xff0c;致力于让计算机理解和解释视觉信息&#xff0c;近年来取得了令人瞩目的进展&#xff0c;广泛应用于安防监控、自动驾驶、图像编辑、医学影像分析等众多领域。从入门到精通计算机视觉需要系统地学习一系列知识和…

vue3-canvas实现在图片上框选标记(放大,缩小,移动,删除)

双图版本&#xff08;模板对比&#xff09; 业务描述&#xff1a;模板与图片对比&#xff0c;只操作模板框选的位置进行色差对比&#xff0c;传框选坐标位置给后端&#xff0c;返回对比结果显示 draw.js文件&#xff1a; 新增了 createUuid&#xff0c;和求取两个数组差集的方…

StarRocks-hive数据类型导致的分区问题

背景&#xff1a; 有个hive的表&#xff0c;是月分区的&#xff08;month_id&#xff09;&#xff0c;分区字段用的是string类型。数据量比较大&#xff0c;为了保证计算性能&#xff0c;所以把数据导入到SR里&#xff0c;构建一个内部表。但是在建表的时候想使用月分区使用pa…

Flume——进阶(agent特性+三种结构:串联,多路复用,聚合)

目录 agent特性ChannelSelector描述&#xff1a; SinkProcessor描述&#xff1a; 串联架构结构图解定义与描述配置示例Flume1&#xff08;监测端node1&#xff09;Flume3&#xff08;接收端node3&#xff09;启动方式 复制和多路复用结构图解定义描述配置示例node1node2node3启…

嵌入式学习(15)-stm32通用GPIO模拟串口发送数据

一、概述 在项目开发中可能会遇到串口不够用的情况这时候可以用通过GPIO来模拟串口的通信方式。 二、协议格式 按照1位起始位8位数据位1位停止位的方式去编写发送端的程序。起始位拉低一个波特率的时间&#xff1b;发送8位数据&#xff1b;拉高一个波特率的时间。 三、代码 …

【Go系列】:全面掌握 Sentinel Go —— 构建高可用微服务的流量控制、熔断、降级与系统防护体系

前言 在现代分布式系统架构中&#xff0c;服务的稳定性和可用性是至关重要的。随着微服务和云原生技术的发展&#xff0c;如何有效地进行流量控制、熔断降级以及系统保护成为了一个关键课题。Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制组件&#xff0c;它不仅…

多模态RAG:通用框架方案调研汇总

阅读原文 多模态检索增强生成是一种新兴的设计范式&#xff0c;允许AI模型与文本、图像、视频等存储进行交互。在介绍多模态 RAG 之前&#xff0c;我们先简单了解一下传统的检索增强生成 (RAG)。 标准 RAG RAG 的理念是找到与用户查询相关的核心信息&#xff0c;然后将该信息…

《HTML 的变革之路:从过去到未来》

一、HTML 的发展历程 图片: HTML 从诞生至今&#xff0c;经历了多个版本的迭代。 &#xff08;一&#xff09;早期版本 HTML 3.2 在 1997 年 1 月 14 日成为 W3C 推荐标准&#xff0c;提供了表格、文字绕排和复杂数学元素显示等新特性&#xff0c;但因实现复杂且缺乏浏览器…

游戏交易系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 题目&#xff1a;游戏交易系统设计与实现 摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询…

Mac mini m4本地跑大模型(ollama + llama + ComfyUI + Stable Diffusion | flux)

安装chat大模型&#xff08;不推荐&#xff0c;本地运行的大模型只能聊废话&#xff0c;不如网页版使用openAI等高效&#xff09; 首先下载ollama的安装包 https://ollama.com/ 点击启动访问&#xff1a;http://localhost:11434 Ollama is running 代表已经运行起来了&#x…

精品C++项目推荐:分布式kv存储系统

项目代码直接开源到Github&#xff1a;https://github.com/youngyangyang04/KVstorageBaseRaft-cpp 欢迎去star&#xff0c;fork&#xff01; 项目背景相关 背景 在当今大规模分布式系统的背景下&#xff0c;需要可靠、高可用性的分布式数据存储系统。 传统的集中式数据库在…

Milvus中如何实现全文检索(Full Text Seach)?

在前两篇文章中&#xff08;Milvus python库 pymilvus 常用操作详解之Collection&#xff08;上&#xff09; 和 Milvus python库 pymilvus 常用操作详解之Collection&#xff08;下&#xff09;&#xff09;&#xff0c;我们了解了Milvus基于dense vector和sparse vector实现的…

unity打包web,如何减小文件体积,特别是 Build.wasm.gz

unity打包WebGL&#xff0c;使用的是wasw&#xff0c;最终生成的Build.wasm.gz体积很大&#xff0c;有6.5M&#xff0c;有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码&#xff1a; 此步可将大小从6.5减小到 6.2&#xff08;此项默认开启&#xff0c;只是改了裁剪等级…

STM32 CubeMx HAL库 独立看门狗IWDG配置使用

看门狗这里我就不多介绍了&#xff0c;能搜到这篇文章说明你了解 总之就是一个单片机重启程序&#xff0c;设定好超时时间&#xff0c;在超时时间内没有喂狗&#xff0c;单片机就会复位 主要应用在单片机异常重启方面&#xff0c;比如程序跑飞&#xff08;注意程序跑飞时你就…

Selenium:强大的 Web 自动化测试工具

Selenium&#xff1a;强大的 Web 自动化测试工具 在当今的软件开发和测试领域&#xff0c;自动化工具的重要性日益凸显。Selenium 就是一款备受欢迎的 Web 自动化测试工具&#xff0c;它为开发者和测试人员提供了强大的功能和便利。本文将详细介绍 Selenium 是什么&#xff0c…

幼儿园学校养老院供电安全解决方案

一、 电气火灾每年以30%的比例高居各类火灾原因。以50%到80%的比例高居重特大火灾。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。2021年“119”消防日&#xff0c;国家应急管理部消防救援局公布了2021年1至10月份全国火灾形势报告。数据显示&#xff0c;从火灾种类来…

UnityShaderLab-实现沿y轴溶解效果

实现思路&#xff1a; 实现思路同UnityShaderLab-实现溶解效果-CSDN博客 ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; 效果&#xff1a; 未完待续。。。

5G Multi-TRP R16~R18演进历程

提升小区边缘用户的性能&#xff0c;在覆盖范围内提供更为均衡的服务质量&#xff0c;NR中引入了多TRP协作传输的方案。多TRP协作传输通过多个TRP之间进行非相干联合传输&#xff08;Non Coherent-Joint Transmission&#xff0c;NC-JT&#xff09;、重复传输&#xff0f;接收或…

deepin 搭建 hadoop singlenode

deepin 搭建 hadoop singlenode 一、准备 1、升级软件 sudo apt updatesudo apt -y dist-upgrade2、安装常用软件 sudo apt -y install gcc make openssl libssl-dev libpcre3 libpcre3-dev libgd-dev \rsync openssh-server vim man zip unzip net-tools tcpdump lrzsz ta…