zoukankan      html  css  js  c++  java
  • loj2278. 「HAOI2017」字符串

    2278. 「HAOI2017」字符串

    给出一个字符串 $ s $ 和 $ n $ 个字符串 $ p_i $,求每个字符串 $ p_i $ 在 $ s $ 中出现的次数。注意这里两个字符串相等的定义稍作改变。

    给定一个常数 $ k $,对于两个字符串 $ a, b $,如果 $ a = b $,那么满足:

    1. $ |a| = |b| $;
    2. 对于所有 $ a_i eq b_i $ 以及 $ a_j eq 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,询问子树和。

    有一个容斥我没有想的很清楚,先咕着

  • 相关阅读:
    Windows10 iis10 arr webfarm
    两个command的疑惑
    关于controller和apicontroller的跨域实现过滤器的不同
    抽象工厂
    c# 字体库跨域解决
    c# 父类的引用指向子类的实例
    垂直居中
    扇形导航
    2D变换
    京东放大镜效果
  • 原文地址:https://www.cnblogs.com/liankewei/p/12247586.html
Copyright © 2011-2022 走看看