一直觉得 指针版的 字典树 各种好 直到这题 出现了MLE之后 才发现 还是有点烦的=-=但其实 解决的方法也蛮简单的 只要写了个deleteTrie函数就好了 1 void deleteTrie( trie* root ) 2 { 3 if( root == NULL ) 4 ...
分类:
其他好文 时间:
2014-08-10 18:18:00
阅读次数:
206
Trie树基础题,记录下代码。
#include
#include
#define MaxNode 4005*100
#define NodeSize 26
#define MOD 20071027
char givenword[300005];
int ans[300005];
int next[MaxNode][NodeSize];
class Trie{
public:
...
分类:
其他好文 时间:
2014-08-10 15:49:40
阅读次数:
273
AC自动机
1。指针p。指向当前已匹配的字符。若p指向root,则当前匹配的字符序列为空
2。指针p->fail。指向与p有相同字符的节点,即p的失配指针。
3。指针temp。
1.构造Trie
2.构造失败指针:
设该节点的字母为c,沿着它的父亲的失败指针走,直到某个节点的儿子的字母存在c,那么就将这个节 ...
分类:
其他好文 时间:
2014-08-10 13:06:50
阅读次数:
184
题目大意:
两个人往一个空的字符串里填单词,每一次只能填一个,而且填完之后要是给出的N个字符串的前缀。
思路分析:
先用给出的所有单词建字典树。
然后从根节点开始dfs。
win [x] 表示踩在x节点上是否有必胜策略
lose [x] 表示踩在x节点上是否有必败策略。
然后是博弈的过程。
如果先手有必胜和必败的策略,那么他可以一直输到k-1
如果只有必胜策略。那么只有当...
分类:
其他好文 时间:
2014-08-09 21:32:19
阅读次数:
255
定义一颗字典树:
struct Trie
{
int n; // n可以存储相关有用信息,视情况而定
Trie *next[maxn]; //maxn视字典树中有多少种元素而定
}
定义字典树的根并初始化:
Trie *root;
void init()
{
root = (Trie *)malloc(sizeof(Trie));
root ->...
分类:
其他好文 时间:
2014-08-08 16:03:16
阅读次数:
170
#1014 : Trie树
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。
这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在...
分类:
其他好文 时间:
2014-08-08 12:45:55
阅读次数:
120
本题是在text里面查找key word的增强版,因为这里有多个text。
那么就不可以简单把Trie的叶子标志记录修改成-1进行加速了,可以使用其他技术,我直接使用个vis数组记录已经访问过的节点,达到加速效果,速度还算挺快的。
不过看discuss里面有人直接使用Trie,做出了140ms的速度,而且他的程序严格来说并不正确,可见本题的数据很水啊。Trie的时间效率肯定比AC自动机低,但是...
分类:
其他好文 时间:
2014-08-07 23:20:15
阅读次数:
295
AC自动机的灵活运用,本题关键是灵活二字。
因为数据不是很大,时间要求也不高的缘故,所以本题有人使用暴力法也过了,有人使用Trie也过了。
当然有人使用AC自动机没AC的,在讨论区里喊AC自动机超时的,那是因为不会灵活运用,或者是硬套模板的,AC了速度也不会快。
给出本人的算法思路:
1 把需要查找的关键字建立Trie, 然后构造AC自动机
2 查找的时候分八个方向查找,比如棋盘...
分类:
其他好文 时间:
2014-08-07 15:41:50
阅读次数:
314
单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了。
AC自动机的基础:
1 Trie, 以这个数据结构为基础的,不过增加一个fail指针和构造fail的函数
2 KMP,不是直接运用KMP,而是需要KMP的思想,KMP思想都没有的话,理解这个算法会更加吃力的。
注意本题的单词会有重复出现的,一个单词只能统计一次。
搜索了一下网上的题解,发现好多代码都...
分类:
其他好文 时间:
2014-08-07 13:20:40
阅读次数:
300