dtoj4742. 寻找字符串
Posted liankewei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dtoj4742. 寻找字符串相关的知识,希望对你有一定的参考价值。
你有一块 $R$ 行 $C$ 列的矩阵 $G$,矩阵里的每个格子有一个大写字母。
你有 $Q$ 个询问字符串,每个字符串都由大写字母构成。你想要知道这 $Q$ 个字符串每个在矩阵 $G$ 中出现的次数。
一个字符串 $S$ 在矩阵 $G$ 中出现,当且仅当存在一个四元组 $(r,c,dr,dc)$,满足:
- $1le rle R,, rle r+drle R$.
- $1le cle C,, cle c+dcle C$.
- $S=G_{r,c}G_{r,c+1}cdots G_{r,c+dc}G_{r+1,c+dc}cdots G_{r+dr,c+dc}$.
Sol
把询问的正串和反串各建一个AC自动机。
把矩形的行从左往右在正串AC上匹配,列从下往上在反串AC上匹配。
矩形每个点对应着两个匹配点,将其看成二维点对$(x,y)$
把每个询问拆成$|S_i|$个询问,每个询问相当于问多少个点既在$A$树上$a$的子树内,又在$B$树上$b$的子树内。
求出dfs序后转化为二维数点。
效率$O(nm log sum |s|)$
以上是关于dtoj4742. 寻找字符串的主要内容,如果未能解决你的问题,请参考以下文章