码迷,mamicode.com
首页 > 其他好文 > 详细

dtoj4742. 寻找字符串

时间:2020-03-01 10:47:29      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:size   元组   维数   大写   span   矩阵   style   log   nbsp   

你有一块 $R$ 行 $C$ 列的矩阵 $G$,矩阵里的每个格子有一个大写字母。

你有 $Q$ 个询问字符串,每个字符串都由大写字母构成。你想要知道这 $Q$ 个字符串每个在矩阵 $G$ 中出现的次数。

一个字符串 $S$ 在矩阵 $G$ 中出现,当且仅当存在一个四元组 $(r,c,dr,dc)$,满足:
- $1\le r\le R,\, r\le r+dr\le R$.
- $1\le c\le C,\, c\le c+dc\le 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. 寻找字符串

标签:size   元组   维数   大写   span   矩阵   style   log   nbsp   

原文地址:https://www.cnblogs.com/liankewei/p/12388353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!