loj2278. 「HAOI2017」字符串
2278. 「HAOI2017」字符串
给出一个字符串 $ s $ 和 $ n $ 个字符串 $ p_i $,求每个字符串 $ p_i $ 在 $ s $ 中出现的次数。注意这里两个字符串相等的定义稍作改变。
给定一个常数 $ k $,对于两个字符串 $ a, b $,如果 $ a = b $,那么满足:
1. $ |a| = |b| $;
2. 对于所有 $ a_i \neq b_i $ 以及 $ a_j \neq b_j $,满足 $ |i-j| < k $。
如果 $ |a| = |b| \le k $,那么认为 $ a = b $。
写在前面:注意!!这题我还没有调出来!
因为这是一道多模板串题,我们考虑AC自动机。
它的要求相当于中间可以有一段长度为k-1的不匹配,其他都要匹配。
那么我们吧所有p的正串建AC自动机,反串也建AC自动机。
对于一个节点x,假设它匹配到了某个串的第j位,对应的反串应该要匹配那个串的后j+k+1位。
那么我们记录下反串j+k+1的节点是哪一个,当成询问挂在x上。
我们在把s拿去跑AC自动机,同样把对应的j与j+k+1记录下来。
统计的时候相当于把j+k+1的位置+1,询问子树和。
有一个容斥我没有想的很清楚,先咕着