Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 11060: Problem E - Beverages ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11060: Problem E - Beverages 解題者:李重儀 解題日期: 2008 年 3 月 4 日 題意: Dilbert 大學剛畢業,他決定要和朋友出去。他有奇怪的嗜好,

Similar presentations


Presentation on theme: "1 11060: Problem E - Beverages ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11060: Problem E - Beverages 解題者:李重儀 解題日期: 2008 年 3 月 4 日 題意: Dilbert 大學剛畢業,他決定要和朋友出去。他有奇怪的嗜好,"— Presentation transcript:

1 1 11060: Problem E - Beverages ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11060: Problem E - Beverages 解題者:李重儀 解題日期: 2008 年 3 月 4 日 題意: Dilbert 大學剛畢業,他決定要和朋友出去。他有奇怪的嗜好, 他想要以喝酒來享受這個重要的時刻。他會先喝含有少量酒精的飲 料 ( 如 beer) ,然後再喝含酒精量較多的 ( 如 wine) 。當他喝了含較多酒 精的飲料後就不會再回頭喝酒精含量較少的飲料了。最後直到沒有 剩餘的飲料為止。 你應該要幫助他來指出一個他喝飲料的順序,如此他可以以他 所想要的方式來喝。 題目主要是要你寫一個程式,輸入 N 及 N 種飲料的名稱及他們酒 精含量的大小關係後,程式須輸出酒精含量由小而大的順序。但如 果有兩個飲料酒精含量順序無法決定,那麼就將較先輸入的那個飲 料名稱排在前面。

2 2 題意範例: 3 種飲料 : vodka wine beer 相對的酒精含量 : wine < vodka beer < wine 故可以知道答案應該是: beer wine vodka 解法:將每個名稱存入 array a 中,然後將酒精含量大小的資料存入一個 table b 中 ( 實際 上是存上一個 array 的 index ,這樣比較方便 ) 。並利用另一個 bool array c 來標示 array a 中哪個元素已經被 output 過了。 之後進行下列演算法: for(int k=0;k<array a 的元素個數 ;k++){ for(int i=0;i<array a 的元素個數 ;i++){ if(c[i]) continue; // 跳過已經 output 過的資料 for(int j=0;j<table b 的資料數 ;j++) if(little(b[i])==i&&(c[big(b[i])]==false)) goto label_next; 將 a[i]output (print 出來 ) ; c[i]=true; // 紀錄說第 i 個已經 output 過了 break; label_next: ; } } 上面的演算法的時間複雜度 :O(N 2 M) N 為飲料的種類的個數, M 為相對關係條件的個 數 (=table b 的資料筆數 )

3 3 解法範例: 底下利用題目給的一組測試資料來說明。 飲料: wine beer rum apple-juice cachaca 相對關係: beer < cachaca apple-juice < beer apple-juice < rum beer < rum beer < wine wine < cachaca 討論: (1) 應該注意題目實際的輸入格式,而它是以 EOF 作為結 束的。本題資料量限制在 1<=N<=100 , 0<=M<=200 ,時 間限制為 1 秒。所以以上的演算法應該已經足夠。我有完 成程式並上傳,並有 accept 。 (2) 為何這樣的演算法可以被 accept 可以討論。如果資料量 很大,可不可以改進使用的演算法和資料結構來減少計 算時間呢? 較大者的 index 較小者的 index 41 13 23 21 01 40 index 飲料名稱字串已經 output 過了 0“wine”false 1“beer”false 2“rum”false 3“Apple-juice”false 4“cachaca”false

4 4 解法範例: 底下利用題目給的一組測試資料來說明。 飲料: wine beer rum apple-juice cachaca 相對關係: beer < cachaca apple-juice < beer apple-juice < rum beer < rum beer < wine wine < cachaca 討論: (1) 應該注意題目實際的輸入格式,而它是以 EOF 作為結 束的。本題資料量限制在 1<=N<=100 , 0<=M<=200 ,時 間限制為 1 秒。所以以上的演算法應該已經足夠。我有完 成程式並上傳,並有 accept 。 (2) 為何這樣的演算法可以被 accept 可以討論。如果資料量 很大,可不可以改進使用的演算法和資料結構來減少計 算時間呢? index 飲料名稱字串已經 output 過了 0“wine”false 1“beer”false 2“rum”false 3“Apple-juice”false 4“cachaca”false 較大者的 index 較小者的 index 41 13 23 21 01 40 true 輸出 : Apple-juicebeerwinerumcachaca

5 5 解法範例: 底下利用題目給的一組測試資料來說明。 飲料: wine beer rum apple-juice cachaca 相對關係: beer < cachaca apple-juice < beer apple-juice < rum beer < rum beer < wine wine < cachaca 討論: (1) 應該注意題目實際的輸入格式,而它是以 EOF 作為結 束的。本題資料量限制在 1<=N<=100 , 0<=M<=200 ,時 間限制為 1 秒。所以以上的演算法應該已經足夠。我有完 成程式並上傳,並有 accept 。 (2) 為何這樣的演算法可以被 accept 可以討論。如果資料量 很大,可不可以改進使用的演算法和資料結構來減少計 算時間呢? 較大者的 index 較小者的 index 41 13 23 21 01 40 index 飲料名稱字串已經 output 過了 0“wine”false 1“beer”false 2“rum”false 3“Apple-juice”false 4“cachaca”false


Download ppt "1 11060: Problem E - Beverages ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11060: Problem E - Beverages 解題者:李重儀 解題日期: 2008 年 3 月 4 日 題意: Dilbert 大學剛畢業,他決定要和朋友出去。他有奇怪的嗜好,"

Similar presentations


Ads by Google