POJ 1625Censored! Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 1859 Accepted: 489 DescriptionThe alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters without word breaks. So, there exist exactly N^M different Freish sentences. But after recent election of Mr. Grass Jr. as Freeland preside
...
AC自动机是用来处理多串匹配问题的,即给你很多串,再给你一篇文章,让你在文章中找这些串是否出现过,在哪出现。对于两个字符串匹配问题可用KMP算法,多字符串则用AC自动机。
看下面这个例子:给定5个单词:say she shr he her,然后给定一个字符串yasherhs。问一共有多少单词在这个字符串中出现过。
构造Trie树首先构造一棵树,如下所示,我们称之为Trie树。构造失败指针然后构造失败指针,应当使用BFS算法。失败指针满足下面的性质:假设有一个节点k,他的失败指针指向j。那么k,j满足:设root到j的距离为n,则从k之上的第n个节点到k所组成的长度为n的单词,与从root到j所组成的单词相同。即图中红框部分是完全一样的,she中的’e’的失败指针就应该指向her中的’e’。构造好失败指针如图所示:(为方便递归判断,root的失败指针可指向NULL)
标记终止节点应当对每个节点都遍历一次所有单词,如果读完某个单词依然可以停留在某个子节点上,则应该将该子节点标记为终止节点。例如,除了say she shr he her 这5个单词,如果再加入一个单词h,终止节点还应多两个:
...