openjudge.4.6算法之贪心_746:Elevator Stopping Plan

news2024/11/16 4:45:29

题目

746:Elevator Stopping Plan
总时间限制: 1000ms 内存限制: 65536kB
描述
ZSoft Corp. is a software company in GaoKe Hall. And the workers in the hall are very hard-working. But the elevator in that hall always drives them crazy. Why? Because there is only one elevator in GaoKe Hall, while there are hundreds of companies in it. Every morning, people must waste a lot of time waiting for the elevator.Hal, a smart guy in ZSoft, wants to change this situation. He wants to find a way to make the elevator work more effectively. But its not an easy job.
There are H floors in GaoKe Hall. It takes 4 seconds for the elevator to raise one floor. It means:It costs (n-1)*4seconds if the elevator goes from the 1 st floor to the nth floor without stop. And the elevator stops 10 second once. So, if the elevator stops at each floor, it will cost (n-1)4+(n-2)10seconds (It is not necessary to calculate the stopping time at nth floor). In another way, it takes 20 seconds for the workers to go up or down one floor. It takes (n-1)20seconds for them to walk from the 1 st floor to the nth floor. Obviously, it is not a good idea. So some people choose to use the elevator to get a floor which is the nearest to their office.
After thinking over for a long time, Hal finally found a way to improve this situation. He told the elevator man his idea: First, the elevator man asks the people which floors they want to go. He will then design a stopping plan which minimize the time the last person need to arrive the floor where his office locates. For example, if the elevator is required to stop at the 4 th , 5 th and 10 th floor, the stopping plan would be: the elevator stops at 4 th and 10 th floor. Because the elevator will arrive 4 th floor at 3
4=12second, then it will stop 10 seconds, then it will arrive 10 th floor at 3
4+10+6
4=46second. People who want to go 4 th floor will reach their office at 12
second, people who want to go to 5 th floor will reach at 12+20=32second and people who want to go to 10 th floor will reach at 46 second. Therefore it takes 46 seconds for the last person to reach his office. It is a good deal for all people.
Now, you are supposed to write a program to help the elevator man to design the stopping plan,which minimize the time the last person needs to arrive at his floor.
输入
The input consists of several test cases. Each test case is in a single line as the following:
n f1 f2 … fn

It means, there are totally n floors at which the elevator need to stop, and n = 0 means no testcases
any more. f1 f2 … fn are the floors at which the elevator is to be stopped (1<=n<=30000, 2<=f1< f2 … fn<=30000). Every number is separated by a single space.
输出
For each testcase, output the time the last reading person needs in the a single line
样例输入
3 4 5 10
1 2
0
样例输出
46
4
来源
LouTiancheng@POJ(楼天城,楼教主,姚期智院士的得意门生)

翻译

746:电梯停车计划
总时间限制: 1000ms内存限制:65536kB
描述
ZSoft Corp.是高科厅的一家软件公司。大厅里的工人非常勤奋。但那个大厅的电梯总是让他们发疯。为什么?因为高科厅只有一部电梯,而里面有数百家公司。每天早上,人们都要浪费很多时间等电梯。哈尔是ZSoft的一个聪明人,他想改变这种情况。他想找到一种方法让电梯更有效地工作。但这不是一件容易的事。
高科楼有H层。电梯上升一层需要4秒。这意味着:如果电梯从1楼到n楼不停地运行,成本为(n-1)*4秒。电梯停了10秒。因此,如果电梯停在每层楼,将花费(n-1)4+(n-2)10秒(不需要计算第n层的停车时间)。换句话说,工人上下一层楼需要20秒。他们从1楼走到n楼需要(n-1)20秒。显然,这不是一个好主意。所以有些人选择乘电梯去离办公室最近的楼层。
经过长时间的思考,哈尔终于找到了改善这种情况的方法。他告诉电梯员他的想法:首先,电梯员问人们想去哪层楼。然后,他将设计一个停车计划,尽量减少最后一个人到达办公室所在楼层的时间。例如,如果电梯需要在4楼、5楼和10楼停车,停车计划为:电梯在4楼和10层停车。因为电梯将在3
4=12秒到达4楼,然后停10秒,然后在3
4+10+6
4=46秒到达10楼。想去4楼的人将在12点到达他们的办公室
第二,想去5楼的人会在12+20=32秒到达,想去10楼的人将在46秒到达。因此,最后一个人到达办公室需要46秒。这对所有人来说都是一笔好交易。
现在,你应该编写一个程序来帮助电梯工作人员设计停车计划,从而最大限度地减少最后一个人到达楼层所需的时间。
输入
输入由几个测试用例组成。每个测试用例都在一行中,如下所示:
n f1 f2。。。fn
这意味着电梯总共需要停靠n层,n=0表示没有测试用例
再。f1 f2。。。fn是电梯停止的楼层(1<=n<=30000,2<=f1<=f2…fn<=30000)。每个数字之间用一个空格隔开。
输出
对于每个测试用例,在单行中输出最后一个阅读者所需的时间
样例输入
3 4 5 10
1 2
0
样例输出
46
4.

分析

电梯上一层楼需要4s,在一层楼停留10s,人上一层楼需20s。
现在需要设计一个算法,使得最后到达办公室的人所需的时间最短。
二分查找需要的最少时间t
判断t时间够不够用(贪心)

  1. 找到t时间内走不上去的层i,判断t时间内能到达(用电梯)。
  2. 不够用就否定该时间t,继续二分
  3. 推算出停靠层(如h层),可以走下去到达i层,还可以走上去到达新i层
  4. 停靠次数增加
    总之充分发挥t时间,走上去走下去,削减层数
    在这里插入图片描述

代码

#include <bits/stdc++.h>
using namespace std;
int n,//共停几层
tn,//顶层
vn,//实际停几层
v[30001];//实际停哪些层
bool k[30001];//需达哪些层
bool f(int t){//判断时间够不够
vn=0;memset(v,0,sizeof(v));//清空停层数据
for(int i=t/20+2;i<=tn;i++){//走上去需要20秒,t时间可达t/20层,所在层不算要+1
while(!k[i]&&i<tn)i++;//找到所需到达层
int t2=(i-1)4+vn10;//前面停靠次数10+电梯所需时间4(i-1)
if(t<t2)return 0;//用电梯直达的时间不够,则该方案取消。
//时间够
//电梯先达上h层,从h层走上去、走下去,尽量使用t时间
//t=(h-1)4+(h-i)20+vn10,电梯时间+走下来时间+停靠时间
//反推出h
int h=(t+20
i-10vn+4)/24;
//实际停h层,在t时间内可以下到i层,也可以上到某一层,就是新的i
//t=(h-1)4+(i-h)20+vn10,反推出i 。注意停靠在h,是h-1
i=(t+16
h-10
vn+4)/20;
v[vn++]=h;//存下实际停靠层。注意不能vn++后再算新i
}
return 1;
}
int main(){
//freopen(“in.cpp”,“r”,stdin);
while(cin>>n&&n){
memset(k,0,sizeof(k));//清空
for(int i=0;i<n;i++){
int x;cin>>x;k[x]=1;tn=x;//记住顶层,需达哪些层
}
int l=0,m,r=(tn-1)*4+(tn-2)*10;//二分边界。r是极限需要时间,每层都停
while(l<=r){//二分找到所需最少时间
m=(l+r)/2;//
if(f(m))r=m-1;//时间充裕,可以缩短
else l=m+1;
}
cout<<l<<endl;//足够到达的最少时间
}
return 0;
}

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

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

相关文章

计算机常见运算之左移操作、右移操作以及按位与、按位或

文章目录 前言一、左移操作&#xff08;<<&#xff09;和 右移操作&#xff08;>>&#xff09;1.1 左移操作&#xff08;<<&#xff09;1.2 右移操作&#xff08;>>&#xff09;1.3 应用场景 二、按位与 (&) 和 按位或 (|)2.1 按位与 (&)2.2 按…

Java、python、php版 剧本杀拼团服务平台 剧本杀管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

谓词和量词

一、个体词和谓词 命题是一句陈述句&#xff0c;命题由个体词和谓词组成。 个体词是句子中的主语部分&#xff0c;比如这里的王童。 谓词是句子里的剩余部分&#xff0c;比如是一个三好学生 个体词用小写字母表示&#xff0c;谓词用大写字母&#xff0b;&#xff08;&#…

网络编程(学习)2024.8.29

目录 阻塞式IO(BIO) 特点 阻塞原因与阻塞反应 TCP流式套接字缓冲区 非阻塞式IO(NIO) 特点 设置非阻塞 1.通过对参数的修改实现 2.通过对文件描述符的属性进行设置 fcntl 信号驱动IO (异步IO模型) IO多路复用 select、poll、epoll IO多路复用机制 1.select …

深度学习实战2--MNIST 手写数字分类(代码在末尾)

1.本节目标&#xff1a; (1)了解什么是MNIST 数据集&#xff1b; (2)了解卷积神经网络对图片处理的流程&#xff1b; (3)能够看懂Python 编写的对图片分类任务的代码&#xff1b; (4)在一定程度上掌握处理类似任务的编程能力。 注意&#xff1a;本章节使用开源机器学习库P…

docker 部署 kkFileView 并 使用Nginx代理

拉取镜像 docker pull keking/kkfileview 运行容器 docker run -it -d -p 8012:8012 keking/kkfileview --restart always 配置nginx location /preview {# 本地运行的kkFileView的地址proxy_pass http://127.0.0.1:8012;proxy_set_header Host $host;proxy_set_header X-…

Sang.UAParser一个简单的.NET用户代理解析器

本文主要介绍了 Sang.UAParser 这个简单的.NET用户代理解析器&#xff0c;可以用来解析用户代理字符串&#xff0c;提取出其中的浏览器、操作系统等信息。这个库的使用非常简单&#xff0c;只需要引用 NuGet 包&#xff0c;然后调用相应的方法即可。 1. 简介 Sang.UAParser 是…

YOLO | YOLO目标检测算法(基础入门)

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 YOLO目标检测算法 深度学习经典检测方法1、两阶段&#xff08;Two-stage&#xff09;2、单阶段&#xff08;One-stage&#xff09; 深度学习经典检测方法 1、两阶段&a…

blender修改材质时出现颜色丢失的问题

对于建立的三维模型&#xff0c;我们一般是直接使用gazebo时不会有材质的颜色信息&#xff0c;这一点还是比较烦的&#xff0c;所以这里通过blender来重新给模型上色 首先需要去安装blender&#xff1a; sudo apt install blender对于导入的模型,修改了材质后依然表现为没有颜…

如何在uni-app中使用echarts(泪的教训,保证可用,不能用来打我,保姆级教程)

线上最终实现图&#xff1a; 项目背景&#xff1a;uni-appvue2uv-uiecharts 每步都有坑&#xff0c;跟着看完 实现过程 使用了uniapp插件市场的 echarts-for-wx插件&#xff0c;以下两种方式均可 下载后将以下文件拷贝到项目的components下 如果是zip下载&#xff0c;解压后…

leetcode60.不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2:…

OpenCV绘图函数(10)根据指定像素计算字体大小的函数getFontScaleFromHeight()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算特定字体的大小以达到给定的像素高度。 函数原型 double cv::getFontScaleFromHeight (const int fontFace,const int pixelHeight,const…

C_03_函数学习

函数 优点&#xff1a; 降低代码耦合度降低代码冗余度提高代码复用率提高代码可读性 思想&#xff1a; 封装【包装】 声明&#xff1a; 语法&#xff1a; extern 函数名(形参列表)&#xff1b;// 注意&#xff1a;此时 形参列表中变量名可以忽略不写&#xff1b;定义&#xff1…

风控领域特征工程

在金融行业&#xff0c;风险控制&#xff08;风控&#xff09;是核心环节&#xff0c;它关乎资产安全、合规性以及机构的长期稳健发展。随着大数据时代的到来&#xff0c;金融机构面临着前所未有的数据量和复杂性。在这样的背景下&#xff0c;风控领域特征工程应运而生&#xf…

构建高效公正的会议抽奖系统:提升活动互动性与参与度

在各类会议、庆典及企业活动中&#xff0c;抽奖环节往往是吸引参与者兴趣、增强活动氛围的关键一环。一个高效、公正且充满趣味性的会议抽奖系统&#xff0c;不仅能够极大地提升活动的互动性与参与度&#xff0c;还能加深品牌印象&#xff0c;促进与会者之间的交流与合作。本文…

数据结构线性表(1)顺序表

&#x1f30f;个人博客主页&#xff1a;意疏-CSDN博客 希望文章能够给到初学的你一些启发&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏支持一下笔者吧&#xff5e; 阅读指南&#xff1a; 开篇说明线性表的定义线性表的顺序存储结构&#xff08;顺序表…

全程云OA UploadEditorFile接口存在任意文件上传漏洞 附POC

@[toc] 全程云OA UploadEditorFile接口存在任意文件上传漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学…

中标麒麟v10 sp3 部署cuda cudnn tensorrt deepstream

1.驱动安装 ./NVIDIA-Linux-x86_64-530.41.03.run 更改,不检测 ./NVIDIA-Linux-x86_64-530.41.03.run -no-x-check 禁用nouveau 创建文件/etc/modprobe.d/blacklist-nouveau.conf,添加如下文本: blacklist nouveau options nouveau modeset=0 重新生成initramfs $ su…

压测工具大比武!谁是市场主流?

阿里云PTS 性能测试PTS&#xff08;Performance Testing Service&#xff09;是阿里云一款商业化的性能测试工具。支持按需发起压测任务&#xff0c;可支持百万并发、千万TPS流量发起能力&#xff0c;100%兼容JMeter。PTS支持的场景编排、API调试、流量定制、流量录制等功能&am…

【HarmonyOS】模仿个人中心头像图片,调用系统相机拍照,从系统相册选择图片和圆形裁剪显示 (一)

【HarmonyOS】头像图片&#xff0c;调用系统相机拍照&#xff0c;从系统相册选择图片和圆形裁剪显示 &#xff08;一&#xff09; Demo效果展示&#xff1a; 方案思路&#xff1a; 使用photoAccessHelper实现系统相册选择图片的功能。此API可在无需用户授权的情况下&#xff…