ZeroJudge D518: 文字抄寫 II

題目敘述

本題採EOF方式收資料,每筆資料第一行有一個正整數N,接下來會有N行,每行會有一個字串。要求輸出每個字串是否有出現過,如果是新出現的字串,則輸出 "New!" 加上為第幾個新的字串,如果是已經出現過的字船,則輸出 "Old!" 加上這個字串第一次出現時所賦予的編號。


範例輸入 #1

5

eine

isis

zwei

drei

zwei

6

abc

abcd

abdc

aabb

bca

abc

8

aaa

aab

aaa

aac

aaaabbbsc

caa

aaba

aab

範例輸出 #1

New! 1

New! 2

New! 3

New! 4

Old! 3

New! 1

New! 2

New! 3

New! 4

New! 5

Old! 1

New! 1

New! 2

Old! 1

New! 3

New! 4

New! 5

New! 6

Old! 2


解題思路

使用Map來紀錄每個字串是否出現過,預設一個為1的變數來存取每個新字串的編號,如果字串為新的字串,則將這個字串的Map值設定為編號變數,然後這個變數+1。如果是舊的字串則輸出這個舊字串的Map值。

解題程式碼如下 (僅供參考):

#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)
            {
                MAP[str] = count;
                cout << "New! " << count << "\n";
                count++;
            }
            else cout << "Old! " << MAP[str] << "\n";
        }
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge M932: 蜜蜂觀察