UVA156 反片语

奇妙的方法
使用一个map和一个multimap
先使用multimap存下所有排序后相同的字符串
遍历multimap,如果当前这个排序后序列只有一个对应的原字符串,将它的原序列加入另一个map桶排输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
typedef multimap<string,string>::iterator miter;
string buf;
map<string,string> b2a;
multimap<string,string> a2b;
int main(){
while(cin>>buf&&buf!="#"){
string backup = buf;
for(int i=0;i<buf.size();i++){
buf[i] = tolower(buf[i]);
}
sort(buf.begin(),buf.end());
a2b.insert(make_pair(buf,backup));
}
for(miter iter=a2b.begin();iter!=a2b.end();){
pair<miter,miter> er = a2b.equal_range(iter->first);
if(distance(er.first,er.second)==1)
b2a[iter->second] = iter->first;
iter = er.second;
}
for(map<string,string>::iterator iter=b2a.begin();iter!=b2a.end();iter++){
cout << iter->first << endl;
}
return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!