PAT-ADVANCED1008——Elevator

我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED

原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805511923286016

题目描述:

PAT-ADVANCED1008——Elevator

题目翻译:

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++解题报告:

PAT-ADVANCED1008——Elevator