Trie模板 UVALive 3942 Remember the Word
2014-07-04 00:27
302 查看
使用Tire进行DP的递推,f[i+len]+=f[i] 若S[i+1..len]为字典中的元素。
View Code
#include <cstdio> #include <cstring> #include <queue> const long long maxnode = 4010*100; const long long SIGMA_SIZE = 26; const long long maxlen = 100; const long long maxn = 300010; const long long MOD = 20071027; using namespace std; char s[maxn]; int f[maxn]; struct Trie { int ch[maxnode][SIGMA_SIZE]; int val[maxnode]; int size; Trie(){clear();} void clear(){ size=1; memset(ch[0],0,sizeof(ch[0])); memset(val,0,sizeof(val)); } int index(char t){return t-'a';}; int buildNewNode(int u){ memset(ch[size],0,sizeof(ch[size])); val[size]=u; return size++; } void insert(char *s){ int u = 0; for(;*s;s++){ int c = index(*s); if(!ch[u][c]) ch[u][c]=buildNewNode(0); u=ch[u][c]; } val[u]=1;//val[u]=v } void find(int i,char *s){ int u=0,len=0; for(;*s;s++){ int c = index(*s); if(ch[u][c]){ len++; u=ch[u][c]; f[i+len]=(val[u]*f[i]+f[i+len])%MOD; //if(val[u]){find an end } } else break; } } }; Trie trie; int main() { int CaseNum = 0; while(scanf("%s",s)!=EOF){ int n,len=strlen(s); memset(f,0,sizeof(f));f[0]=1; trie.clear(); scanf("%d",&n); for(int i=0;i<n;i++){ char key[110]; scanf("%s",key); trie.insert(key); } for(int i=1;i<=len;i++) trie.find(i-1,s+i-1); printf("Case %d: %d\n",++CaseNum,f[len]); } return 0; }
View Code
相关文章推荐
- UVALive 2659 数独 DLX模板
- Edge Case(UVALive 6270)(大数加法)(模板)
- uvalive 3942(dp + trie)
- UVALive 6184 - One-Dimensional Cellular Automaton 高斯消元模板题 (2012 Tokyo)
- uvalive 7043(trie)
- UVALive 3942 Remember the Word(trie + dp)
- UVALive 4670 Dominating Patterns(AC自动机模板题)
- UVA 1462 or UVALive 4769 Fuzzy Google Suggest Trie树上的dfs 2009年哈尔滨G题
- (模板题)UVALive 7362 Farey(欧拉函数)
- 文章标题 UVALive 4670 : Dominating Patterns (AC自动机模板题)
- 【字符串匹配】UVALive 4670 模板题
- UVALive - 3942 Remember the Word[Trie DP]
- 计算几何【套模板,推荐模板】 Separating Pebbles UVALive - 7461
- UVAlive - 5792 Diccionário Portuñol (Trie)
- UVALive-4670 Dominating Patterns / 洛谷 3796 【模板】AC自动机
- uvalive 3942 - Remember the Word(Trie)
- UVa11488 - Hyper Prefix Sets(Trie模板)
- UVALive - 3942 Remember the Word Trie
- 伸展树模板(BZOJ 1500,UVALive 3961 HDU 1890)
- UVALive 5913 Dictionary Size (Trie)