题目大意:多组测试数据,每组测试数据给出电梯的任务停留列表,计算电梯完成任务的时间。电梯每上一层花费6秒,下一层花费4秒,停留一层花费5秒,电梯刚开始在0层。
这道题属于简单模拟,给定任务列表求时间,基本没有坑点,唯一要注意的地方任务列表如果出现两个连续且相同的楼层,那么停留时间也是要不停累加的,比如输入 3 0 0 0 那么应该输出15。不会因为楼层一样而跳过。
一开始用的队列,完全没必要,还不如小白方法简单~
代码比较短,还算好理解吧,下面放C++的AC代码:
(PS:渣渣的第3贴,欢迎纠错/提意见)
#include<iostream>
using namespace std;
int main()
{
int N;
while (~scanf("%d", &N) && N)
{
//state:电梯所在楼层 time:所用时间 都初始化为0 next:目标楼层
int next, state = 0, time = 0;
while (N--)
{
scanf("%d", &next);
if (next > state)//上楼
time += (next - state) * 6 + 5;
else if (next < state) //下楼
time += (state - next) * 4 + 5;
else time += 5;
state = next;//更新状态
}
printf("%d\n", time);
}
return 0;
}