已哭瞎。 搞了2个多小时的错误居然是在  没有初始化。。。。。。。。。。。。教训:每个例子一定要考虑到初始化问题。!

每个节点存了一个数组  该数组记录的有26个大小  0-25分别表示记录表示'a'-'z'。一个节点数组的单位记录的是下一个节点的索引即第几个节点。 节点数组记录了

他的所有子节点在哪里和以及子节点的字符是什么。本节点没有记录自己的字符。

适用于 多个字符串。减少枚举量

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define maxnode 500000
#define sigma_dize 27
#define Mod 20071027
int cnt;
char str[],word[];
int num[];
struct Trie
{
int ch[maxnode][sigma_dize];
int val[maxnode];
int size;
void Init()
{
size=;memset(ch[],,sizeof(ch[]));
} int idx(char c)
{
return c-'a';
} void insert(char *s,int v)
{
int u=;
int len=strlen(s);
for(int i=;i<len;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[size],,sizeof(ch[size]));
val[size]=;
ch[u][c]=size++;
}
u=ch[u][c];
}
val[u]=v;
}
void search(char * s,int start)
{
int u=;num[start]=;
int len=strlen(s);
for(int i=start;i<len;i++)
{
int c=idx(s[i]);
if(ch[u][c]==) return;
u=ch[u][c];
if(val[u]) num[start]=(num[i+]+num[start])%Mod; }
}
}; Trie curTire;
int main(void)
{
int s,h=;
while(scanf("%s",str)!=EOF)
{
curTire.Init();
cin>>s;
while(s--)
{
scanf("%s",word);
curTire.insert(word,);
} int len=strlen(str);
memset(num,,sizeof(num));
num[len]=;
cnt=;
for(int i=len-;i>=;i--)
curTire.search(str,i);
printf("Case %d: %d\n",h++, num[]);
}
return ;
}

前缀 树 背单词(Remember the Word,LA 3942)的更多相关文章

  1. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  2. [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  3. 背单词(AC自动机+线段树+dp+dfs序)

    G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...

  4. [SCOI2016]背单词——trie树相关

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...

  5. 【BZOJ2905】背单词 fail树+DFS序+线段树

    [BZOJ2905]背单词 Description 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和. Input 第一行 ...

  6. 【数据结构】关于前缀树(单词查找树,Trie)

    前缀树的说明和用途 前缀树又叫单词查找树,Trie,是一类常用的数据结构,其特点是以空间换时间,在查找字符串时有极大的时间优势,其查找的时间复杂度与键的数量无关,在能找到时,最大的时间复杂度也仅为键的 ...

  7. 【BZOJ4567】[Scoi2016]背单词 Trie树+贪心

    [BZOJ4567][Scoi2016]背单词 Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他 ...

  8. Trie(前缀树/字典树)及其应用

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

  9. [SCOI2016]背单词 题解

    背单词 https://www.luogu.com.cn/problem/P3294 前言: Trie树的省选题(瑟瑟发抖QAQ) 问题汇总:(请忽略) (1)对Trie字典树的运用不熟练 (2)没想 ...

随机推荐

  1. AutoIt 函数学习之----Send函数

    Send: 作用:向激活窗口发送模拟键击操作. 语法: send('按键'[,标志]) 参数: 按键:要发送的按键序列. 标志:[可选参数] 更改程序处理“按键”的方式:  标志 = 0 (默认),按 ...

  2. FAQ:注册表_键值类型

    在注册表中,“键值项数据”可分为下面三种类型. 字符串值(REG_SZ) 该值一般用来作为文件描述和硬件标志,可以是字母.数字,也可以是汉字,但它是长度固定的文本字符串,最大长度不能超过255个字符. ...

  3. Android 天天爱消除辅助

    简介 <天天爱消除>是一款移植于手游的消除类益智游戏,该游戏只有通过手机登录QQ跟微信才能进行,这样一来这款游戏必然会大红大紫. 功能 开发Android自动化触屏事件,录制操作脚本,实现 ...

  4. 2016 Multi-University Training Contest 2 总结

    第二次多校,出师未捷身先死 欣君看了一下09题,高呼水题,迅速码好,一A. 我看了11题,发现分奇偶讨论即可,于是按思路写好,一A. 欣君搞鼓出01题的一个公式,于是我照着写,一WA.简直不可思议,发 ...

  5. golang win32编程的一个dll坑

    例子 package main import ( "github.com/lxn/win" "strconv" "syscall" ) fu ...

  6. hdu5461 Largest Point(沈阳网赛)

    Largest Point Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...

  7. linux重新编译内核

    一.linux内核 1.查看linux内核版本 uname -r 2.下载对应的linux内核 https://www.kernel.org/pub/linux/kernel/ 将内核文件夹解压到/u ...

  8. JQuery 操作input

    获取选中的值 获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item ...

  9. 算法精解(C语言描述) 第5章 读书笔记

    第5章 5.1 单链表 /* -------------------------------- list.h -------------------------------- */ #ifndef L ...

  10. 解决URL请求中的中文乱码问题

    解决URL提交中文出现乱码有两种办法:1.请求端的中字符有encodeURI进行一次转码,如: var url="/getUser?name="+encodeURI(name);服 ...