思路:用map存一下出现的字符串,以及衍生出来的字符串个数就可以了。
之前只是单纯记录是否出现,结果超时。
只要记录衍生出来的字符串,下一次直接跳到最后那一个,判断,即可。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<map>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char str[110];
char str1[110];
void tostr(int temp)
{
int cur = 0;
while (temp)
{
str1[cur++] = temp % 10+48;
temp /= 10;
str1[cur] = 0;
}
reverse(str1, str1 + cur);
}
int main()
{
int n;
while (~scanf("%d", &n))
{
map<string, int>s;
while (n--)
{
scanf("%s", str);
int len = strlen(str);
if (s.find(str)==s.end())
{
puts("OK");
s[str] = 1;
}
else
{
int temp = 0;
while (s[str])
{
temp += s[str];
tostr(temp);
str[len] = 0;
strcat(str, str1);
}
s[str] = 1;
puts(str);
str[len] = 0;
s[str]++;
}
}
}
}