Trie
Trie又叫字典树、前缀树。利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。
暂且分成处理字符的Trie,和处理二进制的01Trie
字符
remember the word
UVALive-3942
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| struct Node { int son[26],val; void init() { memset(son,0,sizeof(son)); val=0; } }; int cur,dp[N]; struct Trie { Node node[N*10]; int sz; void init() { sz=0; node[0].init(); } void insert(string s) { int now=0; for(int i=0; i<s.size(); i++) { int &nxt=node[now].son[s[i]-'a']; if(!nxt)node[nxt=++sz].init(); now=nxt; } node[now].val=1; } void search(string s) { int now=0; for(int i=0; i<s.size(); i++) { int & nxt=node[now].son[s[i]-'a']; now=nxt; if(!nxt)return; if(node[now].val==1) { dp[cur]=(dp[cur]+dp[cur+i+1])%20071027; } } } } T;
|