用hash表记录字符串,然后遍历所有的字符串,检验该字符串是否可以被分解成两个表中的其他的字符串即可。具体实现起来就是用stl中的set。
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <set>
#include <string>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
string s;
set<string> S;
while(cin>>s) S.insert(s);
for(set<string>::iterator it=S.begin();it!=S.end();it++)
{
s=*it;
int flag=0;
for(int i=1;i<s.size()-1;i++)
if(S.count(s.substr(0,i))&&S.count(s.substr(i)))
{
flag=1;break;
}
if(flag) cout<<s<<endl;
}
return 0;
}