Intelligent IME HDU - 4287 字典树
Posted kongbursi-2292702937
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intelligent IME HDU - 4287 字典树相关的知识,希望对你有一定的参考价值。
题意:
给你m个字符串,每一个字符对应一个数字,如下:
2 : a, b, c 3 : d, e, f 4 : g, h, i 5 : j, k, l 6 : m, n, o 7 : p, q, r, s 8 : t, u, v 9 : w, x, y, z
输入n个数字串,问这个数字串可以对应几个字符串
比如ade这个字符串对应的数字串就是233
题解:
用这m个字符串建立一颗字典树,对于每一个节点维护一个变量val,他就代表(从树根到这个节点这一个数字串)有多少个对应的字符串
每次插入的时候记录一下最大值就完了
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 using namespace std; 7 typedef struct Trie* TrieNode; 8 char s[130]; 9 char v[5005][10]; 10 struct Trie 11 { 12 int val; 13 TrieNode next[8]; 14 Trie() 15 { 16 val = 0; 17 memset(next,NULL,sizeof(next)); 18 } 19 }; 20 21 void inserts(TrieNode root,char ss[10]) 22 { 23 TrieNode p = root; //建立的字典树是字符串对应的数字串 24 int len=strlen(ss); 25 for(int i=0;i<len;++i) 26 { 27 int temp=s[ss[i]]; 28 if(p->next[temp]==NULL) p->next[temp]=new struct Trie(); 29 p=p->next[temp]; 30 } 31 p->val+=1; 32 } 33 34 int query(TrieNode root,char ss[10]) 35 { 36 TrieNode p = root; 37 int len=strlen(ss); 38 for(int i=0;i<len;++i) 39 { 40 int temp=ss[i]-‘0‘-2; 41 if(p->next[temp]==NULL) 42 { 43 //printf("%d** ",i); 44 return 0; 45 } 46 else 47 { 48 p=p->next[temp]; 49 } 50 } 51 return p->val; 52 } 53 54 void Del(TrieNode root) 55 { 56 for(int i=0 ; i<8 ; ++i) 57 { 58 if(root->next[i])Del(root->next[i]); 59 } 60 delete(root); 61 } 62 63 int main() 64 { 65 s[‘a‘]=s[‘b‘]=s[‘c‘]=0; 66 s[‘d‘]=s[‘e‘]=s[‘f‘]=1; 67 s[‘g‘]=s[‘h‘]=s[‘i‘]=2; 68 s[‘j‘]=s[‘k‘]=s[‘l‘]=3; 69 s[‘m‘]=s[‘n‘]=s[‘o‘]=4; 70 s[‘p‘]=s[‘q‘]=s[‘r‘]=s[‘s‘]=5; 71 s[‘t‘]=s[‘u‘]=s[‘v‘]=6; 72 s[‘w‘]=s[‘x‘]=s[‘y‘]=s[‘z‘]=7; 73 int t,n,m; 74 char ss[10]; 75 scanf("%d",&t); 76 while(t--) 77 { 78 TrieNode root = new struct Trie(); 79 scanf("%d %d",&n,&m); 80 for(int i=0 ; i<n ; ++i) 81 { 82 scanf("%s",v[i]); 83 } 84 for(int i=0 ; i<m ; ++i) 85 { 86 scanf("%s",ss); 87 inserts(root,ss); 88 } 89 for(int i=0;i<n;++i) 90 { 91 printf("%d ",query(root,v[i])); 92 } 93 Del(root); 94 } 95 return 0; 96 }
以上是关于Intelligent IME HDU - 4287 字典树的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4287 Intelligent IME(map运用)
HDU 4287 Intelligent IME(字典树数组版)
Intelligent IME HDU - 4287 字典树