标签:字母 mem next eof const memset class ++ return
1 const int maxn = 1e5 + 7; 2 const int SIZE = 10;// 字符数量,如小写字母改为26,记得修改getid 3 4 struct Dictionary_tree{ 5 int cnt; 6 int next[maxn][SIZE]; 7 int val[maxn]; 8 9 void init(){ 10 cnt = 0; 11 memset(next[cnt],-1,sizeof(next[cnt])); 12 val[0] = 0; 13 } 14 15 void add(){ 16 cnt++; 17 memset(next[cnt],-1,sizeof(next[cnt])); 18 val[cnt] = 0; 19 } 20 int getid(char c){ 21 return c - ‘0‘; 22 } 23 int build(char *s,int v){ 24 int now = 0; 25 for(int i=0;s[i];i++){ 26 int id = getid(s[i]); 27 if(next[now][id] == -1){ 28 add(); 29 next[now][id] = cnt; 30 } 31 now = next[now][id]; 32 if(val[now] == 1) return 1; 33 } 34 val[now] = v; 35 return 0; 36 } 37 38 int query(char *s){ 39 int now = 0; 40 for(int i=0;s[i];i++){ 41 int id = getid(s[i]); 42 if(next[now][id] == -1) return -1; 43 now = next[now][id]; 44 } 45 return val[now]; 46 } 47 }tre;
标签:字母 mem next eof const memset class ++ return
原文地址:http://www.cnblogs.com/yZiii/p/7284467.html