切換
舊版
前往
大廳
主題

ZeroJudge - c123: 00514 - Rails 解題心得

Not In My Back Yard | 2019-02-07 22:22:25 | 巴幣 0 | 人氣 1014

題目連結:


題目大意:
輸入包含多筆的測試資料。每筆測試資料的第一列有一正整數 N (N ≦ 1, 000)。接著的每一列會有 N 個數字,代表連續數列 1 ~ N 的一種排列。當某一列只有一個「0」時,代表此筆測試資料結束。

而一個火車從 A 到車站,再從車站到 B 。車廂的編號為 1 ~ N ,如下圖:
而火車的車廂可以各自行駛進站,但是出去到B時,只能是最後進的車廂出去。

求給定的 1 ~ N 之一種排列,可否經由上面的操作排出來?

(當 N = 0 時,程式中止)


範例輸入:
5
1 2 3 4 5
5 4 3 2 1
5 4 1 2 3
0
7
4 5 3 7 6 2 1
0
0



範例輸出:
Yes
Yes
No

Yes



解題思維:
從題目的敘述可以看到車站(Station)是個堆疊(Stack),因此我們可以直接模擬看看給定的序列是否可行。

我們知道火車的車廂是照順序駛進車站的,因此例如像範例輸入的 N = 7 那測資:
4 5 3 7 6 2 1
一開始為 4 ,所以車站內由裡到外(外面是靠近 A 、 B 的那邊)還有 1 、 2 、 3  三個車廂。

4 5 3 7 6 2 1
再來是 5 ,就直接把剛剛尚未過來的車廂 5 直接丟過去 B 那邊即可。

4 5 3 7 6 2 1
再來是 3 ,所以從車站拿出一個車廂。現在還有 1 、 2 兩個車廂。

4 5 3 7 6 2 1
再來是 7 ,所以 6 會進入車站, 7 就直接到 B 。現在車站有 1 、 2 、 6 三個車廂。

4 5 3 7 6 2 1
再來是 6 ,把 6 丟出去。車站還有 1 、 2 兩個車廂。

4 5 3 7 6 2 1
再來是 2 ,2 出去。車站還剩 1 這個車廂。

4 5 3 7 6 2 1
最後是 1 ,所以把 1 送出去。

以上,所以的車廂都成功出去了,沒有堵塞。因此這個排列是可行的,輸出「Yes」。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作