hihoCoder week4 Trie图
ac自动机
题目链接 https://hihocoder.com/contest/hiho4/problem/1
参考:https://blog.csdn.net/baidu_30541191/article/details/47447175#
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
using namespace std; struct node
{
node *nxt[], *fail;
int ok;
node() {
ok = ;
for(int i=; i<; i++) nxt[i]=NULL;
fail=NULL;
}
}; const int N = 1e6 + ;
char s[N];
node *root; void ins(char *s, int len)
{
node *rt = root;
for(int i=; i<len; i++) {
int x= s[i]-'a';
if(rt->nxt[x] == NULL)
rt->nxt[x] = new node();
rt= rt->nxt[x];
}
rt->ok = ;
return ;
} void build()
{
node *rt = root;
rt->fail = NULL; queue<node*> que;
que.push(rt); while(!que.empty()) {
node *tmp = que.front();
que.pop();
for(int i=; i<; i++) {
if(tmp->nxt[i] != NULL) {
if(tmp == root)
tmp->nxt[i]->fail = root;
else {
node *p = tmp->fail;
while(p!=NULL) {
if(p->nxt[i] != NULL) {
tmp->nxt[i]->fail = p->nxt[i];
break;
}
p = p->fail;
}
if(p==NULL) tmp->nxt[i]->fail = root;
}
que.push(tmp->nxt[i]);
}
}
}
} bool query(char *s, int len)
{
node *rt = root;
int cnt=;
for(int i=; i<len; i++) {
int x = s[i]-'a';
while(!rt->nxt[x] && rt->fail != NULL)
rt=rt->fail;
rt=rt->nxt[x];
if(!rt) rt = root;
node * tmp = rt;
while(tmp->ok==) {
cnt++;
tmp->ok = ;
tmp = tmp->fail;
}
}
if(cnt > )
return true;
return false;
} int main()
{
root = new node();
int n; scanf("%d",&n);
for(int i=; i<n; i++) {
scanf("%s", s), ins(s, strlen(s));
} build();
scanf("%s", s);
bool ok = query(s,strlen(s));
if(ok)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return ;
}
hihoCoder week4 Trie图的更多相关文章
- hihoCoder#1036 Trie图
原题地址 看了这篇博文,总算是把Trie图弄明白了 Runtime Error了无数次,一直不知道为什么,于是写了个脚本生成了一组大数据,发现果然段错误了. 调试了一下午,总算闹明白了,为什么呢? 1 ...
- hihoCoder 1036 Trie图 AC自动机
题意:给定n个模式串和一个文本串,判断文本中是否存在模式串. 思路:套模板即可. AC代码 #include <cstdio> #include <cmath> #includ ...
- 【hihoCoder】1036 Trie图
题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...
- 【hihoCoder 1036】Trie图
看了一下简单的$Trie图$,调模板调啊调一连调了$2h$,最后发现$-'a'$打成$-'A'$了hhh,有种摔键盘的冲动. $Trie图$是$Trie树$上建立“前缀边”,不用再像在$Trie树$上 ...
- HihoCoder第四周:Trie图
第四周的题目是前两周的综合,综合在一个是KMP算法的思想,一个是树的这么一个数据结构. 题目 : Trie图 输入 每个输入文件有且仅有一组测试数据. 每个测试数据的第一行为一个整数N,表示河蟹词典的 ...
- Trie 图
时间限制:20000ms 单点时限:1000ms 内存限制:512MB 描述 前情回顾 上回说到,小Hi和小Ho接受到了河蟹先生伟大而光荣的任务:河蟹先生将要给与他们一篇从互联网上收集来的文章,和一本 ...
- hiho一下 第二周&第四周:从Trie树到Trie图
hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihoc ...
- 【AC自动机&&Trie图】积累
以前KMP和后缀系列(主要是后缀数组,后缀自动机),都刷了一定数量的题,但是对于AC自动机,却有些冷落,罪过. 但是我感觉,在蓝桥杯比赛中AC自动机出现的概率比后缀系列大,简单的会考匹配,稍难一点会考 ...
- 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)
本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...
随机推荐
- steam Depot 生成与应用脚本
Depot 生成脚本 首先为您上传的每个 Depot 创建一个 Depot 生成脚本.从复制 depot_build_1001.vdf 脚本开始,并按将上传的 Depot ID 命名. Depot 生 ...
- html5 手机端 通讯录 touch 效果
不说那么多直接上代码. <html> <head> <meta http-equiv="Content-Type" content="tex ...
- HttpServletRequestWrapper
1). why 需要改变从 Servlet 容器 (可能是任何的 Servlet 容器)中传入的 HttpServletRequest 对象的某个行为,该怎么办? 一. 继承 HttpServletR ...
- 设计模式之Command(命令)(转)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Hive使用pmod函数实现dayofweek函数功能
dayofweek在hive2.2.0开始支持,低版本的hive原生未提供dayofweek函数(获取一个日期是星期几的方法),所以只有我们自己编写udf函数提供,udf就不说了,在这里给出了一个使用 ...
- ClassOne__HomeWork
1,static类型 static类型定义有两类,一类是静态数据,另一类是静态函数. 静态数据跟成员变量不同,它可以通过类名直接访问,而不需要通过定义对象来访问.它的的生成也和成员变量不一样,它只生成 ...
- 两眼论&矩阵变现理论结合打造赚钱大模式
两眼论&矩阵变现理论结合打造赚钱大模式 围棋有一个基本规则,就是一块棋有两只真眼,就是活棋. 围棋没有复杂的规则,它最有趣的地方是没有太多的规则和限制,由此演变出了大千世界,所以古人云“棋如人 ...
- CSS 选择器权重计算规则
其实,CSS有自己的优先级计算公式,而不仅仅是行间>内部>外部样式:ID>class>元素. 一.样式类型 1.行间 <h1 style="font-size: ...
- Symfony2学习笔记之事件分配器
----EventDispatcher组件使用 简介: 面向对象编程已经在确保代码的可扩展性方面走过了很长一段路.它是通过创建一些责任明确的类,让它们之间变得更加灵活,开发者可以通过继承这 ...
- SQL Server 2012中的AlwaysOn尝试
简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移 ...