CF528D Fuzzy Search (生成函数+FFT)】的更多相关文章

题目传送门 题目大意:给你两个只包含A,G,C,T的字符串$S$,$T$,$S$长$T$短,按照如下图方式匹配 解释不明白直接上图 能容错的距离不超过$K$,求能$T$被匹配上的次数 $S$串同一个位置可以被$T$的不同位置匹配多次 对4种字符分别处理,假设我们现在只讨论字符A 对于字符串AGCAATTCAT,字符A的生成函数就是1001100010 题目要求距离不超过K就能匹配,把周围距离不超过$K$的位置都变成1,形成一个新串$S'$ $S$  1001100010 $S'$ 1111110…
CF528D. Fuzzy Search 题意:DNA序列,在母串s中匹配模式串t,对于s中每个位置i,只要s[i-k]到s[i+k]中有c就认为匹配了c.求有多少个位置匹配了t 预处理\(f[i][j]\)表示位置i可以匹配字符j 分别考虑每一个字符c,对s的每个位置i求出用\(s[i,i+m-1]\)匹配t,这个字符匹配了几次 用\(a_i=[s的位置i匹配c],\ b_i=[t_i=c]\) 那么c的匹配次数就是\(c_j=\sum\limits_{i=0}^{m-1}a_{j+i}b_i…
[CF528D]Fuzzy Search(FFT) 题面 给定两个只含有\(A,T,G,C\)的\(DNA\)序列 定义一个字符\(c\)可以被匹配为:它对齐的字符,在距离\(K\)以内,存在一个字符\(c\),问给定串\(T\)在\(S\)中出现了几次. \(|S|,|T|,K<=200000\) 题解 字符集很小,可以分开进行\(FFT\). 现在的匹配的定义为距离当前位置\(K\)以内的所有字符中是否含有这个字符,如果有设置为\(1\),没有就是\(0\),把字符分开做\(FFT\)然后相…
Fuzzy Search 题意: 给定一个模式串和目标串按下图方式匹配,错开位置不多于k 解题思路: 总共只有\(A C G T\)四个字符,那么我们可以按照各个字符进行匹配,比如按照\(A\)进行匹配时,当\(k=1\)时,我们将目标串 \(ACAT\)化作 \(1~0~1~0\) 模式串 \(AGCAATTCAT\)化作 \(1~1~1~1~1~1~0~1~1~1\) 同样是反置目标串 可以得到以x为匹配终点的位置的匹配函数\(p(X)=\sum_{i+j=x}A(i)B(j)\) 如此进行…
Fuzzy Search 给你文本串 S 和模式串 T,求 S 的每个位置是否能模糊匹配上 T. 这里的模糊匹配指的是把 T 放到 S 相应位置上之后,T 中每个字符所在位置附近 k 个之内的位置上的 S 的字符至少有一个与之相同. 1 ≤ |T| ≤ |S| ≤ 200 000, 0 ≤ k ≤ 200 000.字符串是基因序列. 题解 由于字符集很小,所以对每种字符分别处理. 对 T 每个位置赋值为它是否等于这个字符.对 S 的每个位置前后找找有没有这种字符即可. 然后卷积看看匹配了多少个位…
题意: DNA序列,在母串s中匹配模式串t,对于s中每个位置i,只要s[i-k]到s[i+k]中有c就认为匹配了c.求有多少个位置匹配了t. 分析: 这个字符串匹配的方式,什么kmp,各种自动机都不灵. 所以有一个邪门功夫,fft字符串匹配.(做过洛谷<残缺的字符串>一题的应该都不陌生,带通配符的匹配字符串可以用fft卷积来做) 首先,由于字符集大小只有4,所以我们可以对每个字符分别考虑. 根据题意,对于每个字符,我们预处理a[i]数组,代表i位置是否能匹配当前字符(左右k个能匹配也算) 之后…
题目 Source http://codeforces.com/problemset/problem/528/D Description Leonid works for a small and promising start-up that works on decoding the human genome. His duties include solving complex problems of finding certain patterns in long strings cons…
原文链接http://www.cnblogs.com/zhouzhendong/p/8782849.html 题目传送门 - CodeForces 528D 题意 给你两个串$A,B(|A|\geq|B|)$,以及一个$k$. 其中$A_i$与$B_j$匹配的条件是$A_{i-k\dots i+k}$中至少有一个与$B_j$相同. 问$B$能在$A$中匹配多少次. 字符集:$\{'A','C','G','T'\}$. $|B|\leq|A|\leq 2\times 10^5,k\leq 2\ti…
题意:给定k,只含有ACGT的字符串S和T,求T在S中出现了多少次. 字符匹配:如果S的[i - k, i + k]中有字符x,那么第i位可以匹配x. 解: 首先预处理:f[i][j]表示S的第i位能否匹配j.差分一下即可. 然后按照FFT的套路,枚举每种字符,算一遍有多少个匹配.四种字符加起来,如果匹配数等于T的长度,就匹配成功. #include <cstring> #include <cmath> #include <algorithm> #include <…
题目链接 CF528D 题解 可以预处理出\(S\)每个位置能匹配哪些字符 对每种字符 构造两个序列 如果\(S[i]\)可以匹配该字符,则该位置为\(0\),否则为\(1\) 如果\(T[i]\)可以匹配该字符,则该位置为\(1\),否则为\(0\) 将\(T\)翻转一下做卷积 如果某个字符意义下的某个位置为\(1\),就说明出现了\(T\)能匹配而\(S\)不能的情况,此时\(T\)不匹配\(S\) 否则\(T\)匹配\(S\) 即寻找有多少位置都为\(0\) #include<algori…
题目链接:https://cn.vjudge.net/contest/281959#problem/B 题目大意:给你n,m,k.然后输入两个字符串,n代表第一个字符串s1,m代表第二个字符串s2,然后问你第二个字符串在第一个字符串能匹配的次数(选定第一个字符串的位置之后,任意s2中一个字符串,都能在s1对应的位置左右k个都能找到相同的字符). 具体思路:和 这一篇的思路基本使用一样的. FFT(Rock Paper Scissors Gym - 101667H) AC代码: #include<…
传送门 fftfftfft好题. 题意简述:给两个字符串s,ts,ts,t,问ttt在sss中出现了几次,字符串只由A,T,C,GA,T,C,GA,T,C,G构成. 两个字符匹配的定义: 当si−k,si−k+1,...,si+k−1,si+ks_{i-k},s_{i-k+1},...,s_{i+k-1},s_{i+k}si−k​,si−k+1​,...,si+k−1​,si+k​中存在至少一个字符使得sj=tls_j=t_lsj​=tl​时,我们称sis_isi​与tlt_ltl​匹配. 题目…
D. Fuzzy Search time limit per test:3 seconds memory limit per test:256 megabytes input:standard input output:standard output Leonid works for a small and promising start-up that works on decoding the human genome. His duties include solving complex…
CF 528D. Fuzzy Search NTT 题目大意 给出文本串S和模式串T和k,S,T为DNA序列(只含ATGC).对于S中的每个位置\(i\),只要中[i-k,i+k]有一个位置匹配了字符\(i\),那么就认为\(i\)可以匹配.求S中有多少位置匹配了T. 思路 一共有四个字母,我们分别计算每个字母是否可行,其他不管. 最后四个都满足的位置就是一个合法位置(指的是初始位置). 设g[i]表示S_i位置是否是枚举的字母,f[i]表示M_i是否是是枚举的字母. 他们满足条件只需要右斜对角…
link 巨佬olinr的题解 <-- olinr很强 考虑生成函数 考虑直径上点数>=4的毛毛虫的直径,考虑直径中间那些节点以及他上面挂的那些点的EGF \(A(x)=\sum_{i\ge 1}\frac{ix^i}{i!}\) 考虑和直径两端点相连的节点,我们强制让他挂至少一个点(否则他就成了直径端点就重复了),EGF \(B(x)=\sum_{i\ge 2}\frac{ix^i}{i!}\) 最后答案生成函数就是 \(Ans(x)=B(x)*\frac{1}{1-A(x)}*B(x)\)…
time limit per test:3 seconds memory limit per test:256 megabytes input:standard input output:standard output Leonid works for a small and promising start-up that works on decoding the human genome. His duties include solving complex problems of find…
在Umbraco examine search项目开发中,有一个需求, 就是intercom 和 intercoms需要返回同样的结果 也就是说 搜索intercom 时, 能返回包含intercom和intercoms的结果 搜索intercoms时,能返回包含intercom和intercoms的结果 在网上搜索了一下,发现需要使用Fuzzy Search 使用Fuzzy Search 又有两种方式: 一种是IExamineValue, 因为SearchTerm.Fuzzy(0.1f) 返回…
题目链接 \(Descripiton\) 给出文本串S和模式串T和k,S,T为DNA序列(只含\(A,T,G,C\)).对于S中的每个位置\(i\),只要\(s[i-k]\sim s[i+k]\)中有一个位置匹配了字符\(c\),那么就认为\(i\)可以匹配\(c\).求S中有多少位置匹配了T. \(Solution\) 题意一直不很明白..(→_→这就是你颓了一下午一晚上写了一道题的理由?) 匹配当然是连续的,即若位置\(i\)匹配,则\(S[i+j]=T[j]\ (0\leq j<m)\).…
题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive -4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法处理出每个位置能够取到的字符.设模式串长度为m. 令\(C(m-1+k) = \sum_{i=0}^{m-1}A_{i+k}*B(m-i-1)\). 反转模式串B, 对每个字符c,若该位上能够取到c,则多项式该位取1,否则为0,FFT求卷积.并记录[m-1,n-1]每个位置4次计算的系数\(C\)之…
Problem Description 你有一个长度为 \(n\) 的串 \(S\),以及长度为 \(m\) 的串 \(T\). 现给定一个数 \(k\) ,我们说 \(T\) 在 \(S\) 的位置 \(i\) 匹配上,当且仅当对于每一个 \(1\le a\le m\) ,都有一个位置 \(1\le b\le n\) 满足 \(|(i+a-1)-b|\le k\) ,且 \(S_b=T_a\) . 请回答 \(T\) 在 \(S\) 中匹配上了多少个不同的位置. Range \(n,m,k\l…
链接:http://codeforces.com/problemset/problem/528/D 正解:$FFT$. 很多字符串匹配的问题都可以用$FFT$来实现. 这道题是要求在左边和右边$k$个字符内有字符和模式串匹配,那么用$kmp$是显然不行的.我们考虑把模式串翻转一下.因为只有4个字符,所以每个字符我们分开考虑.然后对于母串,如果在给定范围内有当前字符,这个位置就赋值为1:对于模式串,如果当前位置是当前字符,这个位置就赋为1.然后我们对这两个多项式做一下卷积,记录$Ans$,最后4种…
链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese得到了n位选手的反馈,每位选手只会在一个群给Applese反馈 现在,Applese要挑选其中的k名选手组队比赛,为了维持和各个群的良好关系,每个群中都应有至少一名选手成为Applese的队友(数据保证每个群都有选手给Applese反馈) Applese想知道,他有多少种挑选队友的方案 输入描述:…
题目大意 有\(n\)把斧头,不同斧头的价值都不同且都是\([0,m]\)的整数.你可以选\(1\)~\(3\)把斧头,总价值为这三把斧头的价值之和.请你对于每种可能的总价值,求出有多少种选择方案. 选\(2\)把斧头时,\((a,b)\)和\((b,a)\)视为一种方案.选\(3\)把斧头时,\((a,b,c),(b,c,a),(c,a,b),(c,b,a),(b,a,c),(a,c,b)\)视为一种方案. \(m\leq 40000\). 题解 考虑生成函数. ​ 设\(X\)是每种斧头取一…
传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x),B(x),C(x)表示选111个,222个,333个的生成函数,ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3(x)表示选111个,222个,333个答案的生成函数. 那么ans1(x)=A(x)ans1(x)=…
3-idiots Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6343    Accepted Submission(s): 2216 Problem Description King OMeGa catched three men who had been streaking in the street. Looking as i…
Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 911  Solved: 528[Submit][Status][Discuss] Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又…
[BZOJ3771]Triple Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又把手上的东西扔在一边,拿起第三个东西问: “这把斧头,是不是你的?” 樵夫还是看不清楚,但是他觉得再这样下去他就没法砍柴了. 于是他又一次答:“…
题面 题解 幸好咱不是在晚上做的否则咱就不用睡觉了--都什么年代了居然还会出高精的题-- 先考虑如果暴力怎么做,令\(G(x)\)为\(F(n,k)\)的生成函数,那么不难发现\[G^R(x)=\prod_{i=1}^n(x+i)\] 也就是说如果把\(G(x)\)的系数反过来就是后面那个东西,所以对于\(n\leq 100000\)的数据直接分治\(FFT\)就行了.不过因为这里的模数不一定满足原根性质,所以要用三模数\(NTT\)或拆系数\(FFT\)(所以咱为了这题还特地去学了一下拆系数-…
传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一发连样例都没过) 如果按上面那样算的话,会有重复的,比如说\(A^2(x)\),会产生诸如\((x_i,x_i)\)之类的同一把斧头的贡献,所以定义\(B(x)\)为同一个斧头重复两次的方案数,那么\(A^2(x)-B(x)\)就是两把斧头时真正的贡献,又因为与顺序无关,所以还要除以\(2\) 然后…
想了好长时间最后发现真是石乐志 第一反应就是两边之和大于第三边,但是这个东西必须要满足三次-- 任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可以用一个前缀和求得(同样记得去重,前缀和里面一定包含前两条边),这样我们就得到了任意两边之和大于任意第三边的组数(这里是算顺序的,(1,2,3)(2,1,3)要算两遍) 然后考虑任意选三条边方案数(算顺序),是\( 6*C_n^3 \),注意到不符合要求的三条边一定是满足两次两边之和大于第三边的,所…