LA 3942 Remember the Word
来源:互联网 发布:数据检索 编辑:程序博客网 时间:2024/05/01 07:05
训练指南 P209 例题
用trie树使得每次寻找递推的下一步。
#include <iostream>#include <cstdio>#include <cstring>#define MOD 20071027using namespace std;struct Trie{ bool tag; int next[26]; bool init() { tag=false; memset(next,-1,sizeof(next)); }};Trie tree[550000];int lt;void init(){ int i; lt=1; tree[0].init();}void insert(char *word){ int t,i,val; t=0; i=0; while (word[i] != '\0') { val=word[i]-'a'; if (tree[t].next[val] == -1) { tree[t].next[val]=lt; tree[lt].init(); if (word[i+1] == '\0') tree[lt].tag=true; //printf("%d %d %d %d %c\n",t,val,lt,tree[lt].tag,word[i]); t=lt; lt++; } else { t=tree[t].next[val]; if (word[i+1] == '\0') tree[t].tag=true; } i++; }}char tar[320000];int d[320000];int main(){ char ts[120]; int n,i,k,lts,t,len,j,p; k=1; while (scanf("%s",tar) != EOF) { lts=strlen(tar); init(); scanf("%d",&n); getchar(); for (i=0; i<n; i++) { scanf("%s",ts); insert(ts); } memset(d,0,sizeof(d)); for (i=0; i<lts; i++) { p=0; for (j=i; tar[j] != '\0'; j++) { t=tar[j]-'a'; if (tree[p].next[t] == -1) break; p=tree[p].next[t]; if (tree[p].tag == true) { if (i-1 != -1) d[j]+=d[i-1]; else d[j]++; d[j]%=MOD; } } /* len=0; j=i; p=0; while (tar[j] != '\0') { t=tar[j]-'a'; len++; // printf("%c %d %d\n",tar[j],p,tree[p].tag); if (tree[p].next[t] == -1) break; p=tree[p].next[t]; //printf("%c %d %d\n",tar[j],p,tree[p].tag); if (tree[p].tag == true) { d[i]+=d[i+len]; d[i]%=20071027; } j++; }*/ } printf("Case %d: %d\n",k,d[lts-1]%MOD); k++; }}
- LA 3942 Remember the Word
- LA 3942 - Remember the Word
- LA 3942 - Remember the Word
- LA 3942 Remember the Word
- LA 3942 Remember the Word
- LA-3942 Remember the Word
- LA 3942 Remember the Word
- LA 3942 3942 - Remember the Word
- Remember the word, LA 3942, Trie Tree
- UVA 1401 Remember the Word & LA 3942
- LA 3942 Remember the Word(Trie+DP)
- LA 3942 Remember the Word (Trie)
- Trie字符串(Remember the Word, LA 3942)
- LA 3942 - Remember the Word 字典树 dp
- LA 3942 Remember the Word(前缀树&树上DP)
- LA 3942 - Remember the Word 字典树+DP
- LA 3942 Remember the Word / 前缀树 + DP
- LA ——3942 - Remember the Word(Trie 入门)
- 精益软件度量——实践者的观察与思考
- Java基本类型与byte数组之间相互转换
- 微软面试题[1-2]
- Sgu 102. Coprimes
- Linux SVN 服务器配置以及客户端使用
- LA 3942 Remember the Word
- SSO单点登录系统WEB Service代码
- sql+datagridview 更新数据库
- 问题四十七: 有等式[※×(※3+※)]2=8※※9,其中※处为1个数字,滴上了墨水无法辨认
- 向国外投稿需要注意些下面几点
- 【Unity3D插件】NGUI屏幕自适应
- C# WebSocket 聊天室
- Chart FX使用笔记
- 学习笔记: cdq分治