清楚字典树保存的原理
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
#define maxnode 1000005
int tree[maxnode][30];
int num[maxnode];
int post=1;
void insert(char *s) {
int len=strlen(s);
int root=0;
for(int i=0; i<len; i++) {
int c=s[i]-'a';
if(tree[root][c]==0) {
tree[root][c]=post++;
}
root=tree[root][c];
num[root]++;
}
}
int find(char *s) {
int len=strlen(s);
int root=0;
for(int i=0; i<len; i++) {
int c=s[i]-'a';
if(tree[root][c]==0) return 0;
root=tree[root][c];
}
return num[root];
}
int main() {
char s[12];
while(gets(s)) {
if(s[0]=='\0') break;
insert(s);
}
while(gets(s)) {
printf("%d\n",find(s));
}
return 0;
}