題意:
每當一個新的用戶想要註冊賬號的時候,他會把他想要註冊的用戶名告訴系統。如果這個系統裏之前沒有出現過這個用戶名,那麼這個用戶名就會被導入數據庫,從而註冊成功。但是,如果這個用戶名在數據庫中已經存在,系統會自動幫助用戶建立一個新的用戶名,系統將在用戶名的後面從1開始添加數字,一旦發現用戶名沒有註冊過,就會幫助用戶直接註冊該賬號(也就是如果用戶想註冊name這個用戶名,但是系統已經有了,於是系統會自動查找name1是否註冊,如果name1也註冊了,那麼檢查name2是否註冊,直到找到一個沒有用過的用戶名,幫用戶自動註冊)。
Input
輸入第一行是一個正整數n,表示有n個用戶想要註冊。接下來n行,每行一個非空字符串(只由小寫字母組成,長度不超過32)表示每個用戶想要註冊的用戶名。1<=n<=10^5
Output
輸出有n行,每行一個答案表示對應的用戶註冊的結果。如果直接註冊成功,就輸出OK,否則就輸出系統幫助用戶註冊的用戶名。
Input
4 abacaba acaba abacaba acab
Output
OK OK abacaba1 OK
這個題很簡單,對萌新很友好,就是利用STL中的map,每次輸入一個name,就在map中查找,如果沒找到就把name扔進去,否則利用map的映射輸出新的用戶名。
代碼如下:
#include<cstdio>
#include<map>
#include<string>
#include<string.h>
#include<cstring>
#include<iostream>
using namespace std;
map<string,int>mp;
string name;
int n;
int main()
{
cin >> n;
map<string, int>::iterator j;
for (int i = 1; i <= n; i++) {
cin >> name;
j = mp.find(name);
if (j == mp.end()) {
cout << "OK" << endl;
mp[name] = 0;
}
else {
mp[name]++;
cout << name << mp[name] << endl;
}
}
return 0;
}