ことばがありあまれどなお、 このゆめはつづい|

trsins

园龄:3年10个月粉丝:18关注:2

【做题记录】CF528D Fuzzy Search

  • CF528D Fuzzy Search
    • 算法:FFT

题目:

有一个长度为 n 的串 S,以及长度为 m 的串 T

现给定一个数 k ,我们说 TS 的位置 i 匹配上,当且仅当对于每一个 1am ,都有一个位置 1bn 满足 |(i+a1)b|k ,且 Sb=Ta

请回答 TS 中匹配上了多少个不同的位置。

n,m,k2105

题解:

pi,ch 表示位置 i 上放上字符 ch 是否合法。pi,ch=1 当且仅当存在 sj=ch|ij|k

pi,ch ,对于 si=cpik,ch,pik+1,ch,,pi+k1,ch,pi+k,ch 设为 1,差分就行了。

fi 表示以 i 开头的长度为 |T| 字符串能与 T 成功匹配多少位。

fi=j=1|T|pi+j1,tj

枚举每个字符 ch{ACTG},设 flagj 表示 Tj 是否等于 ch。那么字符 chfi 带来的贡献就是

fi=j=1|T|pi+j1,ch×flagj

那么原式即为

ans=xy=ifxflagy

S 翻转一下,得

ans=x+y=ifxflagy

FFT 一卷即可。

本文作者:trsins

本文链接:https://www.cnblogs.com/trsins/p/15776597.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   trsins  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示