HDU.1008 Elevator

一、題目解讀

1、原題

HDU.1008 Elevator

2、分類

雜題、水題

3、題意

運糧的人開始在第0層,電梯上升一層需要6s、下降一層需要4s、停留運糧需要5s.

給定一個層數列表,需按照上面的順序進行搬運,計算所需時間。

4、輸入輸出格式

輸入/輸出 要求與格式
輸入樣例個數 通過輸入N=0N=0標識輸入結束
輸入格式(每個樣例) 每一行輸入一個數NN,後接NN個層數aia_i(空格隔開)
輸出格式(每個樣例) 每行輸出一個結果

5、數據範圍

數據 範圍
一切輸入tt 0t<1000 \leq t < 100

二、題解參考

1、總體思路

思路 時間複雜度 具體解釋
窮舉法 O(n)O(n) 直接模擬電梯按順序升降,逐層計算

2、思路①

(1).分析

考慮到問題規模NN很小,直接窮舉就OK了。

用一個變量nownow來存儲當前所在層,將下一層和當前層的差d=ainowd = a_i - now傳入內聯函數calc計算(或者直接用三目運算符),計算表達式如下:calc(d)={4d+5d<06d+5d>0calc(d) = \begin{cases} -4 d+5 & d < 0 \\ 6d + 5 & d>0 \end{cases}

(2).AC代碼

HDU(C++/G++)AC代碼如下:

#include <iostream>
#include <algorithm>

using namespace std;

int a[105];
int now, res;

inline int calc(int num)
{
	// 疑惑:是否需要考慮連續兩層都是同一層?——從AC的結果來看不用考慮
	if (num < 0)
		return -4 * num + 5;
	return 6 * num + 5;
}

int main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

	int n;
	while (cin >> n, n)
	{
		for (int i = 0; i < n; ++i)
			cin >> a[i];

		now = res = 0;
		for (int i = 0; i < n; ++i)
		{
			res += calc(a[i] - now);
			now = a[i];
		}
		cout << res << endl;
	}

	return 0;
}

三、評價與後話

1、評價

就是道水題,不燒腦。

2、後話

以後準備將大把精力花在ACM刷題上,fight!
加油

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章