●Codevs 4158 残缺的字符串】的更多相关文章

题链: http://codevs.cn/problem/4158/ 题解: FFT. 定义两个相同长度的字符串s1,s2的距离为 $$dis(s1,s2)=\sum_{i=0}^{len-1}(s1[i]-s2[i])^2s1[i]s2[i]$$ 如果两个字符串相同,那么dis=0. (对于本题而言,只需把通配符用0表示,其它字符c用c-'a'+1表示.) 然后看看如何求出文本串T(长度为n)和模式串S(长度为m)的总共匹配数. 定义T串从$l$位置开始的长度为m的子串和S的距离为$D(l)$…
4259: 残缺的字符串 题意:s,t,星号任意字符,匹配方案数 和上题一样 多乘上一个\(a_{j+i}\)就行了 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N=(1<<20)+5;…
[BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想对这两个串重新进行匹配,其中A为模板串,那么现在问题来了,请回答,对于B的每一个位置i,从这个位置开始连续m个字符形成的子串是否可能与A串完全匹配? Input 第一行包含两个正整数m,n(1<=m<=n<=300000),分别表示A串和B…
[BZOJ4259]残缺的字符串(FFT) 题面 给定两个字符串\(|S|,|T|\),两个字符串中都带有通配符. 回答\(T\)在\(S\)中出现的次数. \(|T|,|S|<=300000\) 题解 和两个串基本一样.. 现在\(S\)串中也存在通配符,所以在函数后面再额外乘上一个\(S[i]\)就行了. 拆开式子后是三个卷积的形式. 时间复杂度\(O(nlogn)\) #include<iostream> #include<cstdio> #include<cst…
[BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想对这两个串重新进行匹配,其中A为模板串,那么现在问题来了,请回答,对于B的每一个位置i,从这个位置开始连续m个字符形成的子串是否可能与A串完全匹配? Input 第一行包含两个正整数m,n(1<=m<=n<=300000),分别表示A串和B…
Fuzzy Search 给你文本串 S 和模式串 T,求 S 的每个位置是否能模糊匹配上 T. 这里的模糊匹配指的是把 T 放到 S 相应位置上之后,T 中每个字符所在位置附近 k 个之内的位置上的 S 的字符至少有一个与之相同. 1 ≤ |T| ≤ |S| ≤ 200 000, 0 ≤ k ≤ 200 000.字符串是基因序列. 题解 由于字符集很小,所以对每种字符分别处理. 对 T 每个位置赋值为它是否等于这个字符.对 S 的每个位置前后找找有没有这种字符即可. 然后卷积看看匹配了多少个位…
luoguP4173 残缺的字符串 FFT 链接 luogu 思路 和昨天做的题几乎一样. 匹配等价于(其实我更喜欢fft从0开始) \(\sum\limits_{i=0}^{m-1}(S[i+j]-T[i])^2*T[i]*S[i]=0\) 展开得到 \(\sum\limits_{i=0}^{m-1}S_{i+j}^3T_{i}+\sum\limits\S_{i+j}T_{i}^3-2\sum\limits\S_{i+j}^2T_{i}^2=0\) 反转T串串 \(\sum\limits_{i…
题目链接:P4173 残缺的字符串 题意 给定长度为 \(m\) 的模式串和长度为 \(n\) 的目标串,两个串都带有通配符,求所有匹配的位置. 思路 FFT 带有通配符的字符串匹配问题. 设模式串为 \(p\),目标串为 \(t\),将两个串的内容都根据字母先后顺序映射到 \(1\) 到 \(26\). 如果不带有通配符,那么 \(t\) 以第 \(k\) 位结束的长度为 \(|p|\) 的子串与 \(p\) 匹配时有 \[\sum_{i=0}^{|p|-1} (p[i] - t[k - |p…
P4173 残缺的字符串 FFT在字符串匹配中的应用. 能解决大概这种问题: 给定长度为\(m\)的A串,长度为\(n\)的B串.问A串在B串中的匹配数 我们设一个函数(下标从\(0\)开始) \(C(x,y) =A(x)- B(y)\),若为0,表示B串中以第\(y\)个字符结尾的字符可以与A串中以\(x\)节为结尾的字符可以匹配 \(P(x) = \sum_{i = 0}^{m - 1}C(i,x - m + i + 1)\) 但是很遗憾当\(P(x)\),等于零时,只能够说明上述子串的字符…
P4173 残缺的字符串(FFT字符串匹配) P4173 解题思路: 经典套路将模式串翻转,将*设为0,设以目标串的x位置匹配结束的匹配函数为\(P(x)=\sum^{m-1}_{i=0}[A(m-1-i)-B(x-(m-1-i))]^2A(m-1-i)B(x-(m-1-i))]\),展开之后化简为\(P(x)=\sum_{i+j=x}A^3(i)B(j)-2\sum_{i+j=x}A^2(i)B^2(j)+\sum_{i+j=x}A(i)B^3(j)\) 做三次FFT即可,然后交题就出了一堆玄…