http://acm.hdu.edu.cn/showproblem.php?pid=1251 基本~ #include<iostream> using namespace std; #define N 500000 #define M 26 int tree[N][M]; int Node; int ans[N]; void init() { Node=0; memset(tree[0],0,sizeof(tree[0])); memset(ans,0,sizeof(ans)); } void insert(char *p) { int len=strlen(p); int root=0; for(int i=0;i<len;i++) { int c=p[i]-'a'; if(tree[root][c]==0) { tree[root][c]=++Node; memset(tree[Node],0,sizeof(Node)); } root=tree[root][c]; ans[root]++; } } int find(char *p) { int len=strlen(p); int root=0; for(int i=0;i<len;i++) { int c=p[i]-'a'; if(tree[root][c]==0) return 0; root=tree[root][c]; } return ans[root]; } int main(void) { char ch[11]; init(); while(gets(ch)) { if(strlen(ch)==0) break; insert(ch); } while(gets(ch)) printf("%d/n",find(ch)); }