標題:
202412新手2-香料 (Spices)
[打印本頁]
作者:
may
時間:
2025-1-27 22:03
標題:
202412新手2-香料 (Spices)
問題敘述
小希最近喜歡上烹飪,特別是各式各樣的香料料理,他今天又到超市去購買所需的材料。超市有一整區的香料櫃,他要根據食譜找到所有香料。請寫一個程式幫他找到香料所在位置。
[attach]20602[/attach]
[attach]20603[/attach]
作者:
may
時間:
2025-1-27 22:17
#include <bits/stdc++.h>
//#include <iostream>
//#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;
// 儲存貨架香料編號
vector<vector<int>> shelves(R, vector<int>(C));
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
cin >> shelves[i][j];
}
}
// 找尋每個香料的位置
for (int spice : spicesToFind) {
bool found = false;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (shelves[i][j] == spice) {
// 找到香料,輸出其位置
cout << i + 1 << " " << j + 1 << endl;
found = true;
break;
}
}
if (found) break;
}
if (!found) {
// 如果找不到香料,輸出 -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
*/
複製代碼
作者:
may
時間:
2025-1-27 22:26
使用雜湊表(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
*/
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2