2023年庐阳区青少年信息学科普日真题- 升降机(lift)

题目描述

升降机是建筑施工中经常使用的载人施工机械。当前升降机在一楼,有N个工人走进了升降机,他们有着各自的目标楼层,升降机的门已经关闭。升降机上升一层需要6s,下降一层需要4秒只有到达工人要去的楼层,升降机的门才需要开关一次,开门需要2秒,关门需要3秒,每下一个人需要1秒。求升降机从一楼将N个人送至各自要去的楼层,并且返回一楼,总共需要的时间。

输入格式

输入文件名:lift.in

两行。

第一行,一个正整数N表示共有N个工人。

第二行,N个非1的正整数,表示N个工人各自目标楼层

输出格式

输入文件名:lift.out

一个整数,表示升降机从一楼将N个人送至各自要去的楼层,并且返回一楼,总共需要的时间。

输入输出样例

cpp 复制代码
输入样例1:
4
2 5 2 4


输出样例1:
59

说明

【样例1解释】

(6+2+3+1+1)+(6+6+2+3+1)+(6+2+3+1)+4+4+4+4=59

【数据范围】

1<=N<=100000,楼层数不超过 10^9。


【解析】

这道题就是一个普通的模拟电梯场景问题。话说庐阳区信息学总是和电梯过不去。。。

注意这道题用long long

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
long long a[N];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    a[n+1]=-1;//技巧
    n++;
    //统计连续相同数字即同层人数
    int cnt=1;
    int last=1;//上一次的楼层号
    long long sum=0;
    for(int i=2;i<=n;i++){
        if(a[i]==a[i-1]){
            cnt++;
        }else{
            sum+=(a[i-1]-last)*6+cnt+5;
            // cout<<a[i-1]<<' '<<last<<' '<<cnt<<endl;
            last=a[i-1];//更新上一次楼层号
            cnt=1;
        }
    }
    sum+=(a[n-1]-1)*4;
    cout<<sum;
    return 0;
}
相关推荐
会周易的程序员5 分钟前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导10 分钟前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan11 分钟前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子18 分钟前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化25 分钟前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_6952514928 分钟前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
en.en..1 小时前
C语言 标准输入 / 输出缓冲区
算法
大衛說2 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
吃好睡好便好3 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球3 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode