ZeroJudge D517:  文字抄寫 I

從機器中,不斷地出現 4 個英文字母的單字,現在要你抄寫下來,
倘若這個單字已經出現過,則會使用編號上的號碼直接書寫
倘若這個單字沒有出現過,則會賦予單字一個新的號碼

每組新的測資,代表不同事件,請勿將其納入新的號碼

範例測資

範例輸入範例輸出
每組輸入的第一行
有一個數字 N ( 1 ≦ N ≦ 105)
接下來會有瘋狂科學家講出的 N 行單字
每行由小寫字母 a 到 z 所構成的 4 字單字
若這個字串之前已經出現過,則輸出號碼,若沒有則輸出它將被編寫的號碼。
5
eine
isis
zwei
drei
zwei
New! 1
New! 2
New! 3
New! 4
Old! 3

解題思路

使用 Map<string, int> 來紀錄字串是否有出現過,如果 Map[收到的字串] == 0 代表沒有出現過,宣告一個 count 變數預設為 1 並把 Map[收到的字串] 設為 count 並將 count++。如果不等於 0 代表已經出現過就輸出 Map[收到的字串]。

範例程式碼-ZeroJudge D517:  文字抄寫 I

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    while (cin >> N)
    {
        map<string, int>MAP;
        int count = 1;
        for (int i = 0; i<N; i++)
        {
            string str;
            cin >> str;
            if (MAP[str] != 0)
            {
                cout << "Old! " << MAP[str] << "\n";
                continue;
            }
            MAP[str] = count;
            count++;
            cout << "New! " << MAP[str] << "\n";
        }
    }
}

//ZeroJudge D517
//Dr. SeanXD

發佈留言