题目链接: 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; }