题意:给定一个词典,找出所有刚好由2个单词组成的单词,按字典序输出。
思路:由于单词数量为120000,所以二重循环将单词两两拼在一起是不可能的。而一个单词长度很短,远远达不到120000,所以可以考虑将一个单词拆成两个单词。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std;
int main() {
string x;
set<string> dic;
while(cin>>x) dic.insert(x);
for(set<string>::iterator it=dic.begin();it!=dic.end();it++){
x=*it;
string a,b;
for(int i=1;i<x.size();i++){
a=x.substr(0,i);
b=x.substr(i,x.size()-i);
if(dic.find(a)!=dic.end()&&dic.find(b)!=dic.end()){
cout<<x<<endl;
break;
}
}
}
return 0;
}