前缀 树 背单词(Remember the Word,LA 3942)
已哭瞎。 搞了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)的更多相关文章
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- 背单词(AC自动机+线段树+dp+dfs序)
G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...
- [SCOI2016]背单词——trie树相关
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...
- 【BZOJ2905】背单词 fail树+DFS序+线段树
[BZOJ2905]背单词 Description 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和. Input 第一行 ...
- 【数据结构】关于前缀树(单词查找树,Trie)
前缀树的说明和用途 前缀树又叫单词查找树,Trie,是一类常用的数据结构,其特点是以空间换时间,在查找字符串时有极大的时间优势,其查找的时间复杂度与键的数量无关,在能找到时,最大的时间复杂度也仅为键的 ...
- 【BZOJ4567】[Scoi2016]背单词 Trie树+贪心
[BZOJ4567][Scoi2016]背单词 Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他 ...
- Trie(前缀树/字典树)及其应用
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
- [SCOI2016]背单词 题解
背单词 https://www.luogu.com.cn/problem/P3294 前言: Trie树的省选题(瑟瑟发抖QAQ) 问题汇总:(请忽略) (1)对Trie字典树的运用不熟练 (2)没想 ...
随机推荐
- Codis集群的搭建
Codis集群的搭建与使用 一.简介 Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表 ...
- QWebView 显示本地HTML 文件
QWebView 显示本地HTML文件的时候,如果直接使用 webView->load(QUrl(QString("file:///c:\\a.html")); 可能会导致a ...
- servlet上传图片 服务器路径
1.在servlet中上传图片,上传的文件夹是imge在webroot下,主要代码如下 private void saveImage(HttpServletRequest request, HttpS ...
- Cocos2d-x CCNotificationCenter 通知中心
相信接触过ios开发的人来说对NSNotificationCenter都不陌生.而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心. 那么Noti ...
- Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!)
Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!) 1.控制面板中卸载所有带sql server的程序. 2.在C盘C:\Program Files中sqlserv ...
- struts漏洞修补过程之S2-016
Struts漏洞修补过程之S2-016.邪恶的Struts再次现身,这一次是远程执行漏洞.官方建议立即升级到2.3.15.1.真希望这是最后一次漏洞修补.下面是升级步骤. 1.升级到struts2.3 ...
- 一步一步学android之布局管理器——RelativeLayout
今天开始学习RelativeLayout(相对布局),相对布局在平时布局的时候用的较多,因为Android适配方面的原因.相对布局可以控制组件摆放的位置(放在任一组件的上下左右等位置),下面来看看类的 ...
- oracle添加用户及权限
CREATE USER qdcenter 用户名 IDENTIFIED BY qdcenter 密码 DEFAULT TABLESPACE data1 默认表空间 TEMPORARY TABLE ...
- JavaSE思维导图(八)
- U盘安装CentOS6.x报错:Missing ISO 9660 Image
以前都是DVD安装CentOS,这次因为装固态硬盘,然后把光驱给卸载了.所以就尝试用U盘引导安装CentOS,结果安装时竟然出现了Missing ISO 9660 Image的错误. 解决方案: 将C ...