題目敘述
本題採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";
}
}
}
留言
張貼留言