51nod1565 模糊搜索
来源:互联网 发布:网一网络加速器官网 编辑:程序博客网 时间:2024/06/06 16:49
对每一个字符单独考虑,
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000000;const double pi=acos(-1);struct Complex{ double x,y; Complex operator + (const Complex &c) const { return (Complex){x+c.x,y+c.y}; } Complex operator - (const Complex &c) const { return (Complex){x-c.x,y-c.y}; } Complex operator * (const Complex &c) const { return (Complex){x*c.x-y*c.y,x*c.y+y*c.x}; } Complex operator / (const double &k) const { return (Complex){x/k,y/k}; }}f[maxn],g[maxn],w[maxn];char s[maxn],r[maxn],c[]={'A','G','C','T'};int ok[maxn],rev[maxn],n,m,k,l,t;void fft(Complex *a,int flag){ int x; Complex t1,t2; for (int i=0;i<l;i++) if (rev[i]>i) swap(a[i],a[rev[i]]); for (int i=0;i<t;i++) for (int j=0;j<l;j+=1<<(i+1)) { x=0; for (int k=j;k<j+(1<<i);k++) { t1=a[k]; t2=a[k+(1<<i)]*w[x]; a[k]=t1+t2; a[k+(1<<i)]=t1-t2; x+=flag*(1<<(t-i-1)); if (x<0) x+=l; } } if (flag==-1) for (int i=0;i<l;i++) a[i]=a[i]/l;}int main(){ //freopen("b.in","r",stdin); int ans=0,now,num; scanf("%d%d%d",&n,&m,&k); scanf("%s",s); scanf("%s",r); for (int i=0;i<n;i++) ok[i]=1; l=1,t=0; while (l<n) l<<=1,t++; for (int i=0;i<l;i++) w[i]=(Complex){cos(2*pi*i/l),sin(2*pi*i/l)}; for (int i=0;i<l;i++) for (int j=0;j<t;j++) rev[i]|=((i>>j)&1)<<(t-j-1); for (int x=0;x<4;x++) { for (int i=0;i<l;i++) f[i]=g[i]=(Complex){0,0}; now=0; for (int i=0;i<n;i++) if (s[i]==c[x]) { f[i].x=1; now=k; } else if (now) { f[i].x=1; now--; } now=0; for (int i=n-1;i>=0;i--) if (s[i]==c[x]) { f[i].x=1; now=k; } else if (now) { f[i].x=1; now--; } num=0; for (int i=0;i<m;i++) if (r[i]==c[x]) g[m-i-1].x=1,num++; fft(f,1); fft(g,1); for (int i=0;i<l;i++) f[i]=f[i]*g[i]; fft(f,-1); for (int i=0;i<=n-m;i++) if ((int)(f[i+m-1].x+0.5)<num) ok[i]=0; } for (int i=0;i<=n-m;i++) if (ok[i]) ans++; printf("%d\n",ans);}
阅读全文
0 0
- 51nod1565 模糊搜索
- 51nod 1565 模糊搜索
- 模糊搜索
- 模糊搜索
- 51nod 1565 模糊搜索 fft
- PDO模糊搜索
- 正则表达式 模糊搜索
- javascript 模糊搜索
- linq/lamda 模糊搜索
- Lucene4.4 模糊搜索
- Hibernate 模糊搜索方法
- 表单模糊搜索
- coredata模糊搜索
- FuzzyQuery模糊搜索
- iOS模糊搜索
- NSPredicate模糊搜索
- easyui-模糊搜索
- iOS 模糊搜索
- 链表的重复删除/反转
- ThreadLocal类
- 【stm32f407】I2C实验
- 腾讯-微信红包 腾讯-生成格雷码
- MFC中ShellManager的使用
- 51nod1565 模糊搜索
- wampserve配置台式电脑,手机端访问pc端文件
- 关于关键词抽取的一些思考
- leetcode 4Sum(Java)
- Ue4是什么
- STM8->EXTI
- Linux中yum命令镜像源出错解决方案
- Android开源项目及资源查速表
- 数据结构探险——图篇