题意:中文题。。。问你某个单词是多少单词的前缀
思路:很裸的字典树。。。人生第一次用。。。
#include <cstdio>
#include <cstring>
using namespace std;
#define REP( i, a, b ) for( int i = a; i < b; i++ )
struct Trie{
int va;
Trie *next[26];
Trie(int va) : va(va) { REP(i, 0, 26) next[i] = NULL; }
};
void CreatTrie(Trie *root, char *str){
Trie *p = root;
int len = strlen(str);
REP(i, 0, len){
int id = str[i] - 'a';
if(p -> next[id] == NULL){
Trie *q = new Trie(1);
p -> next[id] = q;
p = p -> next[id];
}
else{
p -> next[id] -> va++;
p = p -> next[id];
}
}
}
int FindTrie(Trie *root, char *str){
Trie *p = root;
int len = strlen(str);
REP(i, 0, len){
int id = str[i] - 'a';
if(p -> next[id] == NULL) return 0;
p = p -> next[id];
}
return p -> va;
}
int main()
{
//freopen("in.txt", "r", stdin);
char str[15];
Trie *root = new Trie(0);
while(gets(str) && strcmp(str, "\0")) CreatTrie(root, str);
while(~scanf("%s", str)) printf("%d\n", FindTrie(root, str));
return 0;
}