题目
思路
对于一个第一次出现的字符串,我们随意一个位置删去,并用map
存下这个字符串的答案,如果不是第一次出现就直接输出map
中的答案。即便是随机删也很容易不同的字符串删出相同的答案比如aabbbbbbbbbbbbb
和abbbbbbbbbbbbbb
,我们再用一个map
来判断当前答案出现过没,如果出现过就在随机一个位置删就行了。
Code
#include<ctime>
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
inline void read(int &T) {
int x=0;bool f=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
T=f?-x:x;
}
int n;
std::string sss;
std::map<std::string,std::string> m;
std::map<std::string,bool> mm;
int main() {
read(n);srand(time(0));
for(int i=1;i<=n;++i) {
std::cin>>sss;
int len=sss.length();
if(m[sss]!="") std::cout<<m[sss]<<'
';
else {
while(1) {
int x=rand()%len;
std::string ans="";
for(int j=0;j<len;++j) {
if(j==x) continue;
ans+=sss[j];
}
m[sss]=ans;
if(mm[ans]) continue;
mm[ans]=1;
std::cout<<ans<<'
';
break;
}
}
}
return 0;
}