关于AC自动机的一些小东西

jys posted @ Dec 02, 2013 02:57:22 PM in 未分类 , 1011 阅读

觉得在getfail()函数里调用gogogo用来生成fail指针可以写的很短。

所有节点的fail指针构成一棵树,一个节点通过fail指针能够到达的所有点,也即这个点所代表的所有点,都在这个点在fail树上到根的路径上。所以dfs之后用数据结构维护一个dfs序列能够快速的支持一些操作。

hzc
(hzc.pas/c/cpp)
 
【题目描述】
  给出N个字符串的集合T(只要两个字符串编号不同就被认为是
不同的字符串),每次操作有三种可能性:
1、  将编号为i 的字符串从集合T中删除。(若T集合中不存
在该字符串则无视该条操作)
2、  将编号为i 的字符串重新加入集合T。(如果该字符串已
经在集合T中则无视该条操作)
3、  给出一个字符串S,求∑ ??(??, ??)
??∈?? 。定义??(??, ??)为字符串
s 在 S 中 出 现 的 次 数 。 ( 比 如
f(“wyxhzcdjmwyxhzcdjm”,”xhzcd”)=2,f(“aaa”,”aa”)=2)
【输入格式】
第一行两个正整数M、N。
接下来N行,每行一个字符串,代表T集合中的字符串。(一开
始所有字符串都在集合中)。
接下来M行,每行一个字符串。如果第一个字符是’-’,代表操作
1;如果第一个字符是’+’,代表操作2;如果第一个字符是’?’代表操
作3。对于操作1和2,在第一个字符之后会紧接着一个整数,代表
操作的字符串编号。对于操作3,在第一个字符之后会紧接着一个字
符串,代表询问的字符串。(第一个字符与接下来的内容之间是没有
空格的)
【输出格式】
  对于每组询问输出一行,代表每个询问的答案。

【数据范围与规定】
对于100%的数据:1≤N,M≤100,000,N个字符串的长度总和以及所
有询问的字符串的长度总和都不会超过1,000,000(?不算在询问的字
符串长度总和之中),给出的N个字符串以及每个询问的字符串都只
由小写字母组成。

 

这道题差不多就这意思。还有阿狸的打字机。

真棒。

这种考性质的题目在NOI中出过一次之后再出真的会有意义?


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter