使用雜湊表(unordered_map)可以大幅提高搜尋效率,將貨架上香料的位置儲存在雜湊表中,查詢香料位置的時間複雜度從
O(R×C) 降為 O(1)。
以下是完整的程式碼,結合雜湊表的實作:- #include <bits/stdc++.h>
- //#include <iostream>
- //#include <unordered_map>
- //#include <vector>
- using namespace std;
- int main() {
- // 輸入香料數量
- int N;
- cin >> N;
- // 儲存要找的香料編號
- vector<int> spicesToFind(N);
- for (int i = 0; i < N; i++) {
- cin >> spicesToFind[i];
- }
- // 輸入貨架資訊
- int R, C;
- cin >> R >> C;
- // 使用雜湊表儲存香料位置
- unordered_map<int, pair<int, int>> spicePosition;
- for (int i = 0; i < R; i++) {
- for (int j = 0; j < C; j++) {
- int spice;
- cin >> spice;
- // 將香料位置存入雜湊表,位置以 1 為基底
- spicePosition[spice] = {i + 1, j + 1};
- }
- }
- // 查找每個要找的香料位置
- for (int spice : spicesToFind) {
- if (spicePosition.find(spice) != spicePosition.end()) {
- // 若香料存在於雜湊表,輸出其位置
- cout << spicePosition[spice].first << " " << spicePosition[spice].second << endl;
- } else {
- // 若找不到香料,輸出 -1
- cout << -1 << endl;
- }
- }
- return 0;
- }
- /*
- 輸入範例1
- 3
- 2 5 7
- 3 3
- 1 2 3
- 4 5 6
- 7 8 9
- 輸出範例1
- 1 2
- 2 2
- 3 1
- 輸入範例2
- 5
- 1 6 8 21 20
- 4 5
- 2 7 9 3 20
- 1 5 8 12 13
- 4 14 19 6 11
- 18 16 17 15 10
- 輸出範例2
- 2 1
- 3 4
- 2 3
- -1
- 1 5
- */
複製代碼 |