從機器中,不斷地出現 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