/*
字典树的板子,
insert表示原字符串,
find表示在是否在原字符串中是否存在这样的一个字符串,或者前缀也可以验证
(不然直接一个map或者hash就过了)
*/
struct Trie {
int nex[maxn][26], cnt;
bool exist[maxn]; // 该结点结尾的字符串是否存在
void insert(char *s, int l) { // 插入字符串
int p = 0;
for (int i = 0; i < l; i++) {
int c = s[i] - 'a';
if (!nex[p][c]) nex[p][c] = ++cnt; // 如果没有,就添加结点
p = nex[p][c];
}
exist[p] = 1;
}
bool find(char *s, int l) { // 查找字符串
int p = 0;
for (int i = 0; i < l; i++) {
int c = s[i] - 'a';
if (!nex[p][c]) return 0;
p = nex[p][c];
}
return exist[p];
}
}trie;