codeforces 4C
题意:
每当一个新的用户想要注册账号的时候,他会把他想要注册的用户名告诉系统。如果这个系统里之前没有出现过这个用户名,那么这个用户名就会被导入数据库,从而注册成功。但是,如果这个用户名在数据库中已经存在,系统会自动帮助用户建立一个新的用户名,系统将在用户名的后面从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;
}