问题
https://vjudge.net/problem/UVA-10391
分析
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <set>
using namespace std;
typedef long long LL;
const int maxn=100000+5;
set<string> s[26];
string str;
int main(void){
while(cin>>str){
s[str[0]-'a'].insert(str);
}
//不能a+b=c这样枚举a,b,会超时,所以只能枚举c,找出a,b
for(int i=0;i<26;++i){
for(auto iter=s[i].begin();iter!=s[i].end();++iter){
int len=iter->size();
for(int j=1;j<len;++j){
string s1=(*iter).substr(0,j);
if(s[s1[0]-'a'].count(s1)==0) continue;
string s2=(*iter).substr(j);
if(s[s2[0]-'a'].count(s2)==0) continue;
printf("%s\n",(*iter).c_str());
break;
}
}
}
return 0;
}