切換
舊版
前往
大廳
主題

ZeroJudge - a632: 12. Domino Rally 解題心得

Not In My Back Yard | 2019-09-10 22:42:50 | 巴幣 0 | 人氣 268

題目連結:


題目大意:
多米諾骨牌的編號如下圖(以下的骨牌擺放方式為「正向」):

輸入有若干筆測試資料。每筆測資會給定好幾個骨牌的資訊,並以一列的「0 F」做結尾。一筆測資當中,每列給定一非負整數(介於 0 ~ 28 之間)以及一個字元(只會是 F 或 B),代表一個骨牌的編號以及擺放的方式(F 代表正向;B 代表反向)

這些骨牌依照給定順序由左至右擺放成一長條序列,如下圖的範例:
接著重複以下步驟,直到不符合條件或是沒有骨牌存在:
由左至右掃過骨牌,一旦發現有兩個相鄰骨牌的鄰近點數一樣,則移除此兩個骨牌。

以上圖為範例,第一次會移除 12 F 、 17 B 這兩個骨牌;之後再移除 15 F 、 20 F 兩張。最後剩下 5 B 、 11 B ,因為兩者的相鄰點數並不一樣。

請輸出最後剩下的骨牌之編號(不須輸出方向)。如果骨牌全數被移除,則輸出「DATASET CLEARED」。



範例輸入:
5 B
15 F
12 F
17 B
20 F
11 B
0 F
18 F
22 B
0 F
23 F
12 B
2 B
4 F
15 B
20 B
19 B
7 B
6 F
0 F


範例輸出:
5 11
DATASET CLEARED
19


解題思維:
骨牌的資訊可以陣列存起來,而且骨牌的編號方式有規律,容易將骨牌的點數資訊轉到陣列裡。

可以看到每個骨牌右邊的點數一定 ≧ 左邊的點數,且前七個骨牌左邊的點數皆為 0 、接著六個左邊皆為 1 、 再 5 個左邊為 2 、……以此類推。而右邊的點數則是以 0 1 2 3 4 5 6 、1 2 3 4 5 6 、 2 3 4 5 6 、 3 4 5 6 、……漸漸地少一個數字去填補。

然後在輸入的時候,遇到什麼編號的骨牌就放什麼進去(這也是陣列的實用之處)。只是遇到要反向(B)的時候,記得骨牌的點數資訊要反過來。

剩下的就是照著要求做即可:由左至右看每組相鄰的骨牌,有沒有相鄰的點數是一致的。一致就移除這兩個骨牌,然後把後面的骨牌遞補到這兩個被移除的骨牌之位置。然後,重複此步驟直到骨牌沒了或是找不到有一致的點數。

最後就是看剩餘骨牌的編號是啥,就輸出這些資訊即可。如果什麼都不剩,才輸出「DATA CLEARED」。

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

創作回應

相關創作

更多創作