PAT-ADVANCED1008——Elevator
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805511923286016
题目描述:
题目翻译:
1008 电梯
我们城市最高的建筑只有一部电梯。 请求列表由N个正数组成。 数字表示电梯将以指定顺序停在哪些楼层。 将电梯向上移动一层需要6秒钟,向下移动一层楼需要4秒钟。 电梯将在每个站点停留5秒钟。
对于给定的请求列表,您将计算在列表上完成请求所花费的总时间。 电梯在开始时位于0楼,并且在满足要求时不必返回到底层。
输入格式:
每个输入文件包含一个测试用例。每个测试用例包含一个正整数N,紧跟着N个正数。输入中的所有数字都小于100。
输出格式:
对每个测试用例,在一行中输出总时间。
输入样例:
3 2 3 1
输出样例:
41
知识点:数组、双指针
思路:用两个变量pre和now分别记录前一时刻电梯所在的层数以及当前时刻电梯所在层数
注意:即使是最后一层,其停留的5s时间也需要计算在内。
时间复杂度是O(N)。空间复杂度是O(1)。
C++代码:
#include<iostream>
using namespace std;
int main(){
int N;
scanf("%d", &N);
int pre = 0;
int now;
int result = N * 5;
for(int i = 0; i < N; i++){
scanf("%d", &now);
if(now > pre){
result += (now - pre) * 6;
}else if(now < pre){
result += (pre - now) * 4;
}
pre = now;
}
printf("%d\n", result);
return 0;
}
C++解题报告: