日期: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;
}
沒有留言:
張貼留言