您的位置:首页 > 其它

字典树模板

2017-08-27 14:17 246 查看
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
const int MAXN=500000+10;
struct trie{
int ch[MAXN<<3][30];
int val[MAXN<<3];
int sz;
void init(){
sz=1;
memset(ch[0],0,sizeof ch[0]);
memset(val,0,sizeof val);
}
int idx(char c){
return c-'a';
}
void insert(const char *s){
int u=0,n=(int)strlen(s);
for(int i=0;i<n;i++){
int c=idx(s[i]);
if(!ch[u][c]){
memset(ch[sz],0,sizeof ch[sz]);
val[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
val[u]++;
}
}
int query(const char *s,int rt,int n,int cur){
int res=0;
if(cur==n){
return val[rt];
}
if(s[cur]=='$'){
for(int i=0;i<26;i++){
if(ch[rt][i]){
res+=query(s, ch[rt][i], n, cur+1);
}
}
}else{
int c=idx(s[cur]);
if(ch[rt][c]){
return query(s,ch[rt][c],n,cur+1);
}
return 0;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: