ZeroJudge M582: 書房 (Study)

你被困在一間古老的書房當中,書桌上的紙條提示你需要找到房門機關的設計稿來逃脫。已知書房中有 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

發佈留言