熱門文章

2025年12月17日 星期三

ZeroJudge 解題筆記:a130. 12015 - Google is Feeling Lucky

作者:王一哲
日期:2025年12月17日


ZeroJudge 題目連結:a130. 12015 - Google is Feeling Lucky

解題想法


這題考排序,網站相關度高排前面,如果相關度相同,先讀到的放前面。如果用 Python 解題,可以將網站相關度 val、讀取資料的索引值 idx、網址 url 組成 tuple 再存入串列,排序時用 lambda function 寫比較式 (-x[0], x[1])。如果用 C++ 解題,可以自訂結構體儲存網站相關度 val、讀取資料的索引值 idx、網址 url,資料存入 vector,排序時用 lambda function 寫比較式。

Python 程式碼


使用時間約為 7 ms,記憶體約為 2.9 MB,通過測試。
T = int(input())
for t in range(1, T+1):
    print(f"Case #{t:d}:")
    data = []
    for i in range(10):
        url, v = input().split()
        data.append((int(v), i, url))
    # 排序,相關度高排前面,如果相關度相同,先讀到的放前面
    data.sort(key = lambda x : (-x[0], x[1]))
    vmax = data[0][0]
    for d in data:
        if d[0] < vmax: break
        print(d[2])


C++ 程式碼


使用時間約為 1 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct Website {
    int val, idx;
    string url;

    Website(int a, int b, string c) : val(a), idx(b), url(c) {}
    Website() : val(0), idx(0), url("") {}
};

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int T; cin >> T;
    for(int t=1; t<=T; t++) {
        cout << "Case #" << t << ":\n";
        vector<Website> data (10);
        for(int i=0; i<10; i++) {
            cin >> data[i].url >> data[i].val;
            data[i].idx = i;
        }
        sort(data.begin(), data.end(), [] (Website a, Website b) {
            if (a.val == b.val) return a.idx < b.idx;
            return a.val > b.val;
        } );
        int vmax = data[0].val;
        for(auto d : data) {
            if (d.val < vmax) break;
            cout << d.url << "\n";
        }
    }
    return 0;
}


沒有留言:

張貼留言