Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 92715 Accepted Submission(s): 50455 Problem Description The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 seconds to move the elevator up one floor, and 4 seconds to move down one floor. The elevator will stay for 5 seconds at each stop.
Input There are multiple test cases. Each case contains a positive integer N, followed by N positive numbers. All the numbers in the input are less than 100. A test case with N = 0 denotes the end of input. This test case is not to be processed.
Output Print the total time on a single line for each test case.
Sample Input 1 2 3 2 3 1 0 Sample Output 17 41 |
这题刚开始看到所有输入都小于100,很乐观的开了一个101个int单位长度的数组,然后很自然的wa了~ ~
看了一下网上的一个代码用的递推法,逻辑都一样,我想可能问题就是出在这了,改成了递推法,过了,,
ac代码
#include <iostream>
using namespace std;
int m_up = 6; //上升所用的时间
int m_dw = 4; //下降所有的时间
int m_st = 5; //停止所用的时间
int N;
int main()
{
while(cin>>N&&N!=0){
int now_stair = 0; //现在所在的层数
int all_time = 0; //总时长
int get_floor;
for(int i=0;i<N;i++){
cin>>get_floor; //获取输入的楼层数
if(get_floor>now_stair){
all_time+=m_up*(get_floor-now_stair);
}else if(get_floor<now_stair){
all_time+=m_dw*(now_stair-get_floor);
}
now_stair = get_floor;
all_time+=m_st;
}
cout<<all_time<<endl;
}
return 0;
}