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