思路:

显然拆位FFT 不解释

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
const double pi=acos(-);
int n=,L,S,T,k,sa[N],st[N],sc[N],sg[N],R[N],csa,cst,csc,csg,ans;
char s[N],t[N],A[N];
struct Complex{double x,y;Complex(){}Complex(double X,double Y){x=X,y=Y;}}Sa[N],St[N],Sc[N],Sg[N],Ta[N],Tt[N],Tc[N],Tg[N];
Complex operator+(Complex a,Complex b){return Complex(a.x+b.x,a.y+b.y);}
Complex operator-(Complex a,Complex b){return Complex(a.x-b.x,a.y-b.y);}
Complex operator*(Complex a,Complex b){return Complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
Complex operator/(Complex a,int b){return Complex(a.x/b,a.y/b);}
void FFT(Complex *a,int f){
for(int i=;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
for(int l=;l<n;l<<=){
Complex wn=Complex(cos(pi/l),f*sin(pi/l));
for(int j=;j<n;j+=(l<<)){
Complex w=Complex(,);
for(int k=;k<l;k++,w=w*wn){
Complex X=a[j+k],Y=w*a[j+k+l];
a[j+k]=X+Y,a[j+k+l]=X-Y;
}
}
}if(f==-)for(int i=;i<n;i++)a[i]=a[i]/n;
}
int main(){
scanf("%d%d%d%s%s",&S,&T,&k,s+,t+);
for(;n<=S+T;n<<=)L++;
for(int i=;i<n;i++)R[i]=(R[i>>]>>)|((i&)<<(L-));
for(int i=;i<=S;i++){
if(s[i]=='A')sa[max(,i-k)]++,sa[i+k+]--;
else if(s[i]=='T')st[max(,i-k)]++,st[i+k+]--;
else if(s[i]=='C')sc[max(,i-k)]++,sc[i+k+]--;
else if(s[i]=='G')sg[max(,i-k)]++,sg[i+k+]--;
}
for(int i=;i<=S;i++)sa[i]+=sa[i-],st[i]+=st[i-],sc[i]+=sc[i-],sg[i]+=sg[i-];
for(int i=;i<=T;i++){
if(t[i]=='A')Ta[T-i]=Complex(,),csa++;
else if(t[i]=='T')Tt[T-i]=Complex(,),cst++;
else if(t[i]=='C')Tc[T-i]=Complex(,),csc++;
else if(t[i]=='G')Tg[T-i]=Complex(,),csg++;
}
for(int i=;i<=S;i++){
if(sa[i])Sa[i-]=Complex(,);
if(st[i])St[i-]=Complex(,);
if(sc[i])Sc[i-]=Complex(,);
if(sg[i])Sg[i-]=Complex(,);
}
FFT(Sa,),FFT(St,),FFT(Sc,),FFT(Sg,),FFT(Ta,),FFT(Tt,),FFT(Tc,),FFT(Tg,);
for(int i=;i<n;i++)Sa[i]=Sa[i]*Ta[i];
for(int i=;i<n;i++)St[i]=St[i]*Tt[i];
for(int i=;i<n;i++)Sc[i]=Sc[i]*Tc[i];
for(int i=;i<n;i++)Sg[i]=Sg[i]*Tg[i];
FFT(Sa,-),FFT(St,-),FFT(Sc,-),FFT(Sg,-);
for(int i=;i<S;i++)A[i]=;
for(int i=;i<S;i++)
if((int)(Sa[i+T-].x+0.2)!=csa||(int)(St[i+T-].x+0.2)!=cst||(int)(Sc[i+T-].x+0.2)!=csc||(int)(Sg[i+T-].x+0.2)!=csg)A[i]=;
for(int i=;i<S;i++)if(A[i])ans++;
printf("%d\n",ans);
}

51nod1565 FFT的更多相关文章

  1. 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)

    对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...

  2. 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2978  Solved: 1523[Submit][Status][Di ...

  3. 为什么FFT时域补0后,经FFT变换就是频域进行内插?

    应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...

  4. FFT NNT

    算算劳资已经多久没学新算法了,又要重新开始学辣.直接扔板子,跑...话说FFT算法导论里讲的真不错,去看下就懂了. //FFT#include <cstdio> #include < ...

  5. CC countari & 分块+FFT

    题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...

  6. ECF R9(632E) & FFT

    Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...

  7. fft练习

    数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> ...

  8. FFT时域与频域的关系,以及采样速率与采样点的影响

    首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...

  9. 【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT

    前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行 ...

随机推荐

  1. Swing之登录界面

    import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Login extends JFrame ...

  2. 洛谷 2574 XOR的艺术

    [题解] 线段树维护区间中1的个数就好了.每次修改就打上标记并把区间的sum改为len-sum. #include<cstdio> #include<algorithm> #i ...

  3. poj 3744 Scout YYF I(递推求期望)

    poj 3744 Scout YYF I(递推求期望) 题链 题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率 解法: 递推式: 对于每个坑, ...

  4. PAT 1127 ZigZagging on a Tree

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  5. Java基础学习总结(79)——Java本地接口JNI详解

    对于java程序员来说,java语言的好处和优点,我想不用我说了,大家自然会说出很多一套套的.但虽然我们作为java程序员,但我们不得不承认java语言也有一些它本身的缺点.比如在性能.和底层打交道方 ...

  6. 简单svg动画

    一.将svg嵌入到html中 svg是指可伸缩矢量图形,它使用XML格式定义图像.在html中可以使用<svg>标签直接嵌入svg代码,例如: <svg version=" ...

  7. Drools介绍与使用

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值.Drools 允许使用声明方式表达业务逻辑.可以使用非 XML 的本地语言编写规则,从而便于学习和理解 ...

  8. Oracle中的 row_number() over (partition by order by ) 用法

    oracle 里面经常这样用 select col1,col2..., row_number() over (partition by colx order by coly) from table_n ...

  9. ci 在阿里云访问的时候404

    最近想把ci 弄到阿里云去,结果发现,本地好好的,到了阿里云就404了.网上查了下 原来是 配置文件的问题. 配置文件就是 vhost下面的 **.conf文件  要有这个才行 location / ...

  10. windows下检測文件改变

    这个主要是应用在我前一篇博客里提到的脚本热载入功能. 主要实现的功能检測目录内文件的变化(改变.新增.删除.重命名),当发现改变的时候通知lua又一次载入脚本.基本上就是一个windows api的使 ...