题目链接: hdu 1247
题目大意: 给出单词词典,问词典中哪些单词可以由另外两个单词组成
解题思路: 用Hash或者map映射每个单词
枚举每个单词分开成两半时,前后部分是否有对应的Hash(或map)值
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
#define MAX 51000
map<string,int>Q; //map<string,int>Q;
char ch[MAX][100];
int main()
{
char ch1[100],ch2[100];
int n,i,j,j1,j2;
n=0;
while(scanf("%s",ch[n])!=EOF)
{
Q[ch[n]]=3;
n++;
}
for(i=0;i<n;i++)
{
for(j=0;ch[i][j]!='\0';j++)
{
ch1[j]=ch[i][j],ch1[j+1]='\0';
if(Q[ch1]==3)
{
for(j1=j+1,j2=0;ch[i][j1]!='\0';j2++,j1++)
{
ch2[j2]=ch[i][j1];
ch2[j2+1]='\0';
}
ch2[j2]='\0';
if(Q[ch2]==3) //每个单词分开成两半时,前后部分是否有对应的Hash(或map)值
{
printf("%s\n",ch[i]);
break; //***找到则退出
}
}
}
}
return 0;
}