切換
舊版
前往
大廳
主題

ZeroJudge - e800: p7. 影片推薦 解題心得

Not In My Back Yard | 2020-05-29 01:07:57 | 巴幣 2 | 人氣 209

題目連結:


題目大意:
第一列給定一正整數 N (1 ≦ N ≦ 50),代表有 N 部影片。接著有 N 列輸入,每列給定一字串 S 以及四個正整數 P 、 L 、 W 、 R (S 不含空格,且字元數不超過 15 個;1 ≦ P ≦ 10 ^ 7 ; 1 ≦ L 、 W ≦ 180 ; 1 ≦ R ≦ 10),依序代表一部影片的名稱、觀看人數、影片長度、平均觀看時間以及相關係數。

而一部影片的「優先推薦係數」之公式為
觀看人數 × 平均觀看時間  ÷ 影片長度 × 相關係數

請將這 N 部影片按照其「優先推薦係數」由大到小排序輸出影片之名稱。如果「優先推薦係數」一致,則輸出較先輸入的影片之名稱。



範例輸入:
範例輸入一:
3
A-Fu 1000 4 4 9
HowHow 100 5 4 10
Married 1000 8 7 9

範例輸入二:4
Mina 500 10 7 10
TT 400 5 4 7
CheerUp 420 3 2 6
Twice 900 3 2 5


範例輸出:
範例輸出一:
A-Fu
Married
HowHow

範例輸出二:
Mina
Twice
TT
CheerUp


解題思維:
就像這幾題一樣(這個這個這個),用一個結構(Struct)將一個影片的所有資料包成同一個物件。然後依據題目的條件(計算公式)去幫這 N 個物件排序。

但是因為公式裡面有一個除法。所以兩者的比較有可能會有浮點數誤差的困擾。因此在比較如下列的「優先推薦係數」時:
P1 × W1 ÷ L1 × R1 ? P2 × W2 ÷ L2 × R2
其中的 ? 代表兩者的關係。

左右兩邊同乘以 L1 × L2 ,變為
P1 × W1 × L2 × R1 ? P2 × W2 × L1 × R2
而因為影片長度 L1 、 L2 皆為正數,所以不會影響原本的大小關係。

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

創作回應

更多創作