思路:
Trie树模板的小变形,在模板中有一个思维拓展的点要值得我们注意,就是每一个节点的e值,在本题中他们不再用来标记单词的结尾,而是用来计数,因为对于Trie树的某一个确定的位置,一个给定的单词只能走过一遍,因此这样记录可以确定一个位置被多少个单词给“经过”,然后找前缀的时候只要遍历到的最后一个字母所在的位置,输出他的count即可。
AC代码:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; struct node { int e; struct node* next[26]; node() { e = 0; for(int i = 0;i <= 25;i++) next[i] = NULL; } }; node* root; char str[100007][17]; char cs[100007][17]; void Insert(char* s) { node* p = root; for(;*s != '