# 【Uva 解題筆記】12015 - Google is Feeling Lucky Uva Online Judge:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3166 Zerojudge:https://zerojudge.tw/ShowProblem?problemid=a130 PDF Source:https://onlinejudge.org/external/120/12015.pdf 題目翻譯: Google 是最著名的網際網路搜尋引擎之一,它提供和開發了許多網路服務和產品。在其搜尋引擎網站上,有一個有趣的按鈕「好手氣」吸引了我們的目光。這個功能讓使用者可以跳過搜尋結果頁面,直接進入首選頁面。這太省事了,節省了大量時間。 問題是,當使用者輸入一些關鍵字並按下「好手氣」按鈕時,會出現哪個網頁呢?Google 做了很多工作,並提出了優秀的方法來處理這個問題。在這個簡化的問題中,讓我們只考慮 Google 為每個網頁分配一個整數值的相關性。最相關的頁面將被選中。如果有平局,所有具有最高相關性的頁面都可能被選中。 你的任務很簡單,給定 10 個網頁及其相關性。只需挑出所有可能在「好手氣」時提供給使用者的候選網頁。 **Input** 輸入包含多組測資。測資的數量 T 在輸入檔案的第一行。 對於每組測資,有 10 行,描述網頁和相關性。每一行包含一個不含任何空白字元的字串,表示這個網頁的 URL,以及一個整數 $V_i$ 表示這個網頁的相關性。URL 的長度介於 1 到 100(包含)之間。$(1 ≤ V_i ≤ 100)$ **Output** 對於每組測資,輸出數行,這些行是可能被選中的網頁的 URL。URL 的順序與輸入相同。請查看範例輸出以獲得更多輸出格式的資訊。 **Sample Input** ``` 2 www.youtube.com 1 www.google.com 2 www.google.com.hk 3 www.alibaba.com 10 www.taobao.com 5 www.bad.com 10 www.good.com 7 www.fudan.edu.cn 8 www.university.edu.cn 9 acm.university.edu.cn 10 www.youtube.com 1 www.google.com 2 www.google.com.hk 3 www.alibaba.com 11 www.taobao.com 5 www.bad.com 10 www.good.com 7 www.fudan.edu.cn 8 acm.university.edu.cn 9 acm.university.edu.cn 10 ``` **Sample Output** ``` Case #1: www.alibaba.com www.bad.com acm.university.edu.cn Case #2: www.alibaba.com ``` 精選單字: - relevance (n.) 相關性、實用性、意義 - tie 在這裡指的是平分、相等的意思 解題思路: 使用 `vector <pair<string, int>> url(10);` 容器。 然後使用 `max_element()` 方法: ```cpp= int maxNum = max_element(url.begin(), url.end(), [](const pair<string, int>& a, const pair<string, int>& b){ return a.second < b.second; }) -> second; ``` 這邊不要使用 `auto`,用 `pair<string, int>`,因為 Uva 是 C++ 11,lambda 還沒有支援 `auto`。 最後透過 range-based for loop 逐個比較是否與 `maxNum` 相等,然後產生輸出。 範例程式碼: ```cpp= #include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false), cin.tie(nullptr); int n; cin >> n; for (int t = 1; t <= n; ++t){ vector <pair <string, int>> url(10); for (int i = 0; i < 10; ++i){ string line; int num = 0; cin >> line >> num; url[i].first = line, url[i].second = num; } int maxNum = max_element(url.begin(), url.end(), [](const pair<string, int>& a, const pair<string, int>& b){ return a.second < b.second; }) -> second; cout << "Case #" << t << ":\n"; for (const auto i : url){ if (i.second == maxNum){ cout << i.first << "\n"; } } } return 0; } ```