開啟章節選單

12015 Google is Feeling Lucky

題目敘述

Google 為最有名的網路搜尋引擎之一,它也提供許多網路服務與產品。在它的搜尋首面上有一個有趣的按鈕「好手氣」吸引了我們的目光。這個功能讓使用者跳過搜尋結果頁面而直接進入排名最高的頁面。真是省時又好用!

問題是,當按下「好手氣」時到底會出現哪一個頁面?Google 有個不錯的方式來處理。為了簡化問題,假設 Google 為每個頁面設定了一個整數的相關度。相關度最高的頁面就會中選。如果平分,所有的相關度最高的頁面都有可能中選。

給你 10 個頁面及相關度,請選出所有可能成為「好手氣」的頁面。

輸入說明

輸入有多筆測資。輸入的第一行有測資的筆數 T。 每筆測資中有 10 行以描述頁面及相關度。每行含有一個不含空白的字串代表頁面的網址及一個整數 Vi 代表該頁面的相關度。網址的長度介於 1 到 100 之間(含)。

輸出說明

對於每筆測資,輸出可能中選的頁面網址。網址出現的順序與輸入相同。

解題思路

對每組測資做自訂排序,如果相關度相同不交換順序,最後輸出最大的相關數的網址。

程式碼

#include <bits/stdc++.h>
using namespace std;

bool Less(pair<string, int> &a, pair<string, int> &b) {
  if (a.second == b.second) return 0;
  return a.second > b.second;
}

int main() {
  int n, a;
  string s;
  cin >> n;
  for (int j = 0; j < n; j++) {
    cout << "Case #" << j + 1 << ':' << endl;
    map<string, int> mp;
    vector<pair<string, int>> vr;
    for (int i = 0; i < 10; i++) {
      cin >> s >> a;
      vr.push_back({s, a});
    }
    sort(vr.begin(), vr.end(), Less);
    int big = vr[0].second;
    for (auto &d : vr)
      if (d.second == big) cout << d.first << endl;
  }
  return 0;
}