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

avatar
作者
筋斗云
阅读量:0

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

输入格式
输入文件名:lift.in

两行。

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

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

输出格式
输入文件名:lift.out

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

输入输出样例

输入样例14 2 5 2 4   输出样例159 

说明
【样例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

#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; } 

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!