0
已解决
李宜和
高级启示者
高级启示者
乘坐电梯(lift)
经验值:800
包河区2021年小学信息学竞赛试题
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
n个人从一楼乘电梯回家,给出他们想要到达的楼层,请计算所有人乘梯所用时间之和。时间的计算方法:在一楼进电梯,第1个人用时1秒,第2个人用时2秒,…,第i个人用时i秒;电梯每上升一层,用时1秒;出电梯时,在同一楼层,第1个人用时1秒,第2个人用时2秒,…,第i个人用时i秒。
输入描述 Input Description
两行。第一行一个正整数n,表示乘梯人数;第二行n个正整数,表示每个人要到达的楼层。
输出描述 Output Description
一行,一个整数,表示整个用时,单位是秒。
样例输入 Sample Input
3
13 18 13
样例输出 Sample Output
27
说明:电梯从1层到13层,用时12秒,从13层到18层,用时5秒,合计17秒;出电梯13层1+2=3秒,18层1秒,合计4秒。总用时6+17+4=27秒。
数据范围及提示 Data Size & Hint
数据范围:
1<=n<=13,2<=要到达的楼层<=32。
没思路......
李宜和在2021-11-12 19:07:08追加了内容
1
李宜和在2021-11-12 19:17:16追加了内容
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
long long n,a[100000],sum,maxn=-0x3f3f3f3f,x[100000],y=1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
sum+=i;
}
for(int i=1;i<=n;i++){
cin>>a[i];
maxn=max(a[i],maxn);
x[a[i]]++;
}
sum+=maxn-1;
for(int i=1;i<=33;i++){
if(a[i]!=0){
while(x[i]--){
sum+=y;
y++;
}
y=1;
}
}
cout<<sum;
return 0;
}
样例不对
李宜和在2021-11-12 19:19:39追加了内容
已解决。即将采纳