ZeroJudge E800: 影片推薦

在這個資訊發達的世代,越來越多人想成為網紅直播主,只要有流量就會有一堆接不完 的代言和業配。喜愛活在鎂光燈下的雯雯,想要打出一番知名度,首先就是要瞭解知名影片 平台的影片推薦系統是如何運作的。以下是某影片串流平台的演算法,請幫助雯雯更加瞭解 影片推薦系統吧! 某影片串流平台計算「優先推薦指數」時,考量的資訊包括觀看人數、影片長度、平均 觀看時間以及類型相關係數,「優先推薦指數」公式計算方法如下:

ZeroJudge E800 題目解說

請依照「優先推薦指數」由高至低列出優先推薦影片名稱。

範例測資

範例輸入範例輸出
第一行有一個正整數 N (1 <= N <=50),代表影片個數。接下來 N 行,每行各有一個字串 S, 一個正整數 P,兩個正整數 L 和 W,一個正整數 R,彼此間以空白隔開。
字串 S(S 不含空格,字元數不超過 15 個字元)代表影片名稱。
正整數 P (1 <= P <= 107 ) 代表觀看人數。
正整數 L (1 <= L <= 180) 和 W (1 <= W <= 180) 分別表示影片長度與平均觀看時間(單 位:分鐘)。
正整數 R (1 <= R <= 10) 代表相關係數。
對於每筆測資按照優先推薦指數由大到小輸出影片名稱。(若推薦指數相同,則依輸入時 的順序來輸出)
3
A-Fu 1000 4 4 9
HowHow 100 5 4 10
Married 1000 8 7 9
A-Fu
Married
HowHow
4
Mina 500 10 7 10
TT 400 5 4 7
CheerUp 420 3 2 6
Twice 900 3 2 5
Mina
Twice
TT
CheerUp

解題思路

宣告一個 Vector<Pair<int, int>>,第一個欄位存推薦指數,第二個欄位存輸入的順序*-1 (因為之後排序過後小數字要被排在比較後面),並且宣告一個 Map<int, string>,Key 值使用輸入順序,Value 存字串 S。

將 Vector 進行 Sort 之後,從最後一位開始輸出至第零位。取出第二個欄位*-1並將其放到 Map 中輸出其中的 Key 值也就是字串 S。

範例程式碼-ZeroJudge E800: 影片推薦

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<pair<float, int>>num;
    map<int, string>MAP;
    for (int i = 0; i<N; i++)
    {
        string S;
        float P, L, W, R;
        cin >> S >> P >> L >> W >> R;
        float calc = P * (W/L) * R;
        pair<float, int>tmp;
        tmp.first = calc;
        tmp.second = i * -1;
        num.push_back(tmp);
        MAP[i] = S;
    }
    sort(num.begin(), num.end());
    for (int i = int(num.size())-1; i>=0; i--)
    {
        cout << MAP[num[i].second * -1] << "\n";
    }
}

//ZeroJudge E800
//Dr. SeanXD

發佈留言