zzuli oj 1121 电梯 模拟

缘起

因为最近每天上班挤电梯. 所以对电梯优化算法产生了兴趣. 所以上网找一些题目来做. zzuli oj 1121 电梯

分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
题目描述
在某一高层建筑内只有一部电梯,当你按下一个数时,电梯会运行到那一层。已知电梯每上升一层需6秒,下降一层需
4秒,在需要停留的那层停留5秒。现有N个整数组成的一个需求列表,电梯将依次响应,电梯从0层开始运行,而在运
行过程结束之前不会返回0层。
注意,若出现相邻两个整数相等,代表在同一层执行了两个不同任务,可以理解为:电梯已经停了5秒,正要关门时又
有人在同一层按开门键,电梯又开门并停留5秒。

输入
输入分两行,第一行是一个正整数N(N<=1000),代表停留几次,第二行的N个数字代表这几次依次停留的楼层。

输出
输出电梯完成该任务序列所需的时间,单独占一行。

样例输入
3
2 3 1

样例输出
41

提示
电梯从0层上升到2层运行时间为12秒,停留5秒,再上升第三层,运行时间6秒,停留5秒,再下降到第一层,运行时
间8秒,停留5秒。共41秒。

模拟水题.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//#include "stdafx.h"
#include <stdio.h>
//#define LOCAL

int n;

int cost(int a, int b) // a是新楼层, b是老楼层
{
int ans = 5;
if (a>=b)
{
ans+=(a-b)*6;
}
else
{
ans+=(b-a)*4;
}
return ans;
}

int main() {
#ifdef LOCAL
freopen("d:\\data.in", "r", stdin);
//freopen("d:\\my.out", "w", stdout);
#endif
scanf("%d", &n);
int a = 0, b, ans =0; // a记录原先停留的楼层
while(n--)
{
b = a;
scanf("%d", &a);
ans += cost(a,b);
}
printf("%d\n", ans);
return 0;
}

ac情况

2973067 yfs 1121 正确 1044 1 C++/Edit 532 B 2019-09-11 10:04:46 LOCAL