原题地址

看了这篇博文,总算是把Trie图弄明白了

Runtime Error了无数次,一直不知道为什么,于是写了个脚本生成了一组大数据,发现果然段错误了。

调试了一下午,总算闹明白了,为什么呢?

1. 空间超大的变量不要放在函数里,会爆栈,应该弄成全局变量或者是从堆上动态分配。

2. 看清题目的数据范围,一开始我的MAX_NODE设的是1024。。。

代码:

 #include <iostream>
#include <cstring> using namespace std; #define MAX_NODE 1000010
#define SIGMA_SIZE 32 int q[MAX_NODE]; struct TrieGraph {
int f[MAX_NODE];
int g[MAX_NODE][SIGMA_SIZE];
int m[MAX_NODE];
int size; void init() {
size = ;
memset(f, , sizeof(f));
memset(g[], , sizeof(g[]));
} int index(char c) {
return c - 'a';
} void insert(const char *s) {
int u = ;
while (*s) {
int i = index(*s);
if (!g[u][i]) {
memset(g[size], , sizeof(g[size]));
m[size] = ;
g[u][i] = size++;
}
u = g[u][i];
s++;
}
m[u] = ;
} void build() {
int qh = , qt = ;
f[] = ;
for (int i = ; i < ; i++) {
int &p = g[][i];
if (p) {
f[p] = ;
q[qt++] = p;
}
else
p = ;
}
while (qh < qt) {
int u = q[qh++];
for (int i = ; i < ; i++) {
int &v = g[u][i];
if (v) {
q[qt++] = v;
f[v] = g[f[u]][i];
m[u] |= m[f[u]];
}
else
v = g[f[u]][i];
}
}
} bool find(const char *s) {
int u = ;
while (*s) {
int i = index(*s);
while (u && !g[u][i])
u = f[u];
u = g[u][i];
if (m[u])
return true;
s++;
}
return false;
}
} tg; int main() {
int N;
string s; tg.init();
cin >> N;
for (int i = ; i < N; i++) {
cin >> s;
tg.insert(s.c_str());
}
tg.build();
cin >> s;
cout << (tg.find(s.c_str()) ? "YES" : "NO") << endl;
return ;
}

hihoCoder#1036 Trie图的更多相关文章

  1. hihoCoder 1036 Trie图 AC自动机

    题意:给定n个模式串和一个文本串,判断文本中是否存在模式串. 思路:套模板即可. AC代码 #include <cstdio> #include <cmath> #includ ...

  2. 【hihoCoder】1036 Trie图

    题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...

  3. hihoCoder week4 Trie图

    ac自动机 题目链接 https://hihocoder.com/contest/hiho4/problem/1 参考:https://blog.csdn.net/baidu_30541191/art ...

  4. 1036 : Trie图 (AC自动机)

    题目大意: 输入 n 个目标单词和一个文本串,判断文本串中是否存在某些目标单词. 思路 赤裸裸的 AC自动机. 代码: #include<iostream> #include<cst ...

  5. hiho一下 第二周&第四周:从Trie树到Trie图

    hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihoc ...

  6. 【hihoCoder 1036】Trie图

    看了一下简单的$Trie图$,调模板调啊调一连调了$2h$,最后发现$-'a'$打成$-'A'$了hhh,有种摔键盘的冲动. $Trie图$是$Trie树$上建立“前缀边”,不用再像在$Trie树$上 ...

  7. HihoCoder第四周:Trie图

    第四周的题目是前两周的综合,综合在一个是KMP算法的思想,一个是树的这么一个数据结构. 题目 : Trie图 输入 每个输入文件有且仅有一组测试数据. 每个测试数据的第一行为一个整数N,表示河蟹词典的 ...

  8. 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)

    本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...

  9. Trie 图

    时间限制:20000ms 单点时限:1000ms 内存限制:512MB 描述 前情回顾 上回说到,小Hi和小Ho接受到了河蟹先生伟大而光荣的任务:河蟹先生将要给与他们一篇从互联网上收集来的文章,和一本 ...

随机推荐

  1. Selenium2工作原理

    Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2 ...

  2. Win10 UWP开发:摄像头扫描二维码/一维码功能

    这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...

  3. bootstrap基本布局

    中文API bootstrap.cn   HTML5文档 类型   移动设备优先 width 属性控制设备的宽度.设置为 device-width 确保它能正确呈现在不同设备上. initial-sc ...

  4. HTML中的那些bug

    1.语法检测时提示有多余的结束标签 <!doctype html> <html> <head> <meta charset="utf-8" ...

  5. iOS-UI控件之UITableView(四)- cell数据刷新

    TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 ...

  6. qt5.8 链接mysql错误:driver not load

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7155858.html 问题:qt5.8 链接mysql错误:driver not load. 解决方案:1.安 ...

  7. spring cloud 概念

    微服务构架需要使用场景: 1.可以将一个系统拆分成几个系统. 2.每个子系统可以部署多个应用,多个应用之间可以使用负载均衡. 3.需要一个服务注册中心,所有的服务都在一个注册中心注册,负载均衡也是通过 ...

  8. zuul 网关

    1.网关的作用 网关可以拦截客户端所有请求,对该请求进行权限控制,负载均衡.日志管理.接口调用监控等操作. 1)网关对所有服务会话进行拦截 2)网关安全控制,统一异常处理,XXS.SQL注入 3)权限 ...

  9. genymotion 双击打开后 图标只显示在任务栏 无法在电脑上显示

    解决办法 删除 c:/users/user/AppData/local/Genymobile  例如:C:\Users\lenovo\AppData\Local\Genymobile 删除注册表:HK ...

  10. webdrive脚本打开firefox浏览器,报“AttributeError: module 'selenium.webdriver' has no attribu

    按照网上提供的方法: 下载geckodriver之后解压缩到 Firefox安装目录 下 添加 Firefox安装目录 到 系统变量Path 重启pycharm 照此步骤执行后,仍然报同样的错.折腾了 ...