b082: C. 國家寶藏

http://zerojudge.tw/ShowProblem?problemid=b082

內容 :

尼克和拉斯是一對立志要尋得全世界各種最珍貴寶藏的兄弟,而他們最近便看上了台灣所流傳的一個傳說。傳說國民政府撤退來台的時候帶來了大批的黃金;然而因為當時的戰亂,使得部份黃金沒有完全依照清冊上所述,好好移交給政府。

剩下的這一部分黃金在哪裡呢?有人說埋在陽明山的地道中,有人說輾轉又被運到美國去了… 真相如何,我們可能永遠無法得知。但是尼克和拉斯在歷史文獻中解開了一部分的密碼,指說黃金其實就埋在今天的台北市某處。確切的位置在哪裡呢?據說在某尊銅像底下。

(尼克和拉斯來到這尊銅像前面…)

尼克:「我們把這座銅像給拆了吧!我想最終的答案離我們不遠了!」

拉斯:「好的!來吧!」

(半小時之後…)

拉斯:「呼呼!終於挖開底座了!咦… 這是什麼?」

尼克:「一片片的黑色石頭,上面刻有兩個不同的數字…」

拉斯:「看起來好像骨牌?」

尼克:「而且你看!骨牌上除了數字之外,還有一個英文字母!」

拉斯:「難道這就是指向最終埋藏地點的密碼?」

尼克:「應該是喔… 不過到底是什麼意思呢?」

(又半小時之後…)

拉斯:「怎麼辦?我完全想不出來耶…」

尼克:「我也想不出來…」

拉斯:「咦… 剛才怎麼都沒注意到這邊有張說明書?」

說明書:「每片骨牌上面刻有兩個數字;只要你把所有骨牌頭尾接在一起,讓第一片骨牌的尾與第二片骨牌的頭是相同的數字,如此一直下去,最後排出來的的一個英文字就是黃金埋藏的地點了。我可以保證,不會有無解的情況發生;也不會有多組解的情況發生。換言之,總共只有一種排法,而且不會有不知道該排哪一張骨牌的情況發生。為了方便後代子孫尋寶,骨牌是不會頭尾顛倒或是反轉的!」

身為尼克與拉斯的數學顧問,你能用電腦解決這樣的問題嗎?

輸入說明 :

第一行是一個數字N,代表總共有幾組骨牌。

接下來,針對每一組骨牌,第一行是一個數字M,代表這組當中有幾片骨牌;往後的M行每一行代表一張骨牌,包含一個整數 (介於 0 ~ 255 之間)、一個小寫字母、再一個整數,中間以空白隔開。以上M行中的第一行就是這串密碼的第一張起始骨牌。

輸出說明 :

針對每一組骨牌,用一行輸出一個英文字串。

範例輸入 :

若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。

2 3 0 n 1 2 u 3 1 t 2 6 15 f 16 27 e 32 44 l 68 20 b 27 16 u 20 32 l 44

範例輸出 :

ntu fubell

提示 :

出處 :

2007 NPSC 國中組決賽

0

n

1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

#include <iostream>using namespace std; int main(){ int a[300],b[300],n,m,start; char c[300]; cin >> n; for(int i=0;i<n;i++){ //輸入資料 cin >> m; for(int j=0;j<m;j++){ cin >> a[j] >> c[j] >> b[j]; } int count[300]={0}; for(int k=0;k<m;k++){ //檢查首尾相同的個數 for(int x=0;x<m;x++){ if (a[______]==b[x]) count[k]++; } } for(int k=0;k<m;k++){ //找出個數為0的,即為開始的數字 if ( ______ ==0) { //cout << a[k] << endl; start=k; break; } } for(int k=0;k<m;k++){ //從開始數字往後找,印出結果 cout << c[start]; for(int x=0;x<m;x++){ if (a[x]==b[start]){ start=x; break; } } } cout << endl; } //system("pause"); }