你被困在一間古老的書房當中,書桌上的紙條提示你需要找到房門機關的設計稿來逃脫。已知書房中有 N 個書架 (編號為 1, 2, …, N 號),設計稿被分成 M 個碎片 (編號為 1, 2, …, M 號),藏在某些書架的角落。請依照設計稿的編號,輸出其所在的書架編號。
範例測資
範例輸入 | 範例輸出 |
---|---|
第一列包含兩個正整數 N (1 ≤ N ≤ 1000) 和 M (1 ≤ M ≤ N),表示有 N 個書架,M 張設計稿碎片。 第二列輸入 N 個數 Ai (0 ≤ ai ≤ M,1 ≤ i ≤ N),表示編號 i 號的書架上的設計稿編號,如果該書架沒有設計稿則 Ai 為 0。一個書架上最多只會有一張設計稿,且保證設計稿編號不重複。 輸入同一列中的兩個整數間以空白間隔。 | 輸出 M 個正整數,依序表示編號 1, 2, …, M 號的設計稿所在的書架編號。 兩個整數間以空白間隔。 |
10 3 0 2 1 0 0 0 0 0 3 0 | 3 2 9 |
5 5 4 1 2 3 5 | 2 3 4 1 5 |
解題思路
使用 Map 來存設計稿的位置,如果 Ai 不是 0 的話就將 Map[Ai] 設為 i。
輸出的時候使用 for (auto it:Map),並輸出 it.second,迴圈會自動從 1 開始,所以不需要擔心排序的問題。
範例程式碼-ZeroJudge M582: 書房 (Study)
#include <iostream>
#include <map>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
map<int, int>MAP;
for (int i = 0; i<N; i++)
{
int tmp;
cin >> tmp;
if (tmp != 0) MAP[tmp] = i+1;
}
for (auto it:MAP)
{
cout << it.second << " ";
}
cout << "\n";
}
//ZeroJudge M582
//Dr. SeanXD