BZOJ 4259 FFT
思路:
为什么好多字符串的题都可以用FFT啊....
我们其实是要判断$\Sigma (a[i]-b[i])^2*a[i]*b[i]==0$
那就把a串翻转过来 把 上式展开
大力做几遍FFT就好啦~
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define double long double
const double pi=acos(-);
const int N=;
int nn,mm,n,L,R[N],all;
struct Complex{
double x,y;Complex(){}
Complex(double X,double Y){x=X,y=Y;}
}A[N],B[N],ans[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 *E,int f){
for(int i=;i<n;i++)if(i<R[i])swap(E[i],E[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=E[j+k],y=w*E[j+k+l];
E[j+k]=x+y,E[j+k+l]=x-y;
}
}
}
if(!~f)for(int i=;i<n;i++)E[i]=E[i]/n;
}
char a[N],b[N];
int main(){
scanf("%d%d%s%s",&mm,&nn,a,b);
for(n=;n<=mm+nn;n<<=)L++;
for(int i=;i<n;i++)R[i]=(R[i>>]>>)|((i&)<<(L-));
reverse(a,a+mm);
for(int i=;i<mm;i++)if(a[i]=='*')a[i]=;else a[i]=a[i]-'a'+;
for(int i=;i<nn;i++)if(b[i]=='*')b[i]=;else b[i]=b[i]-'a'+;
for(int i=;i<mm;i++)A[i].x=a[i];
for(int i=;i<nn;i++)B[i].x=b[i]*b[i]*b[i];
FFT(A,),FFT(B,);
for(int i=;i<n;i++)ans[i]=A[i]*B[i];
for(int i=;i<n;i++)A[i].x=A[i].y=B[i].x=B[i].y=;
for(int i=;i<mm;i++)A[i].x=a[i]*a[i]*a[i];
for(int i=;i<nn;i++)B[i].x=b[i];
FFT(A,),FFT(B,);
for(int i=;i<n;i++)ans[i]=ans[i]+A[i]*B[i];
for(int i=;i<n;i++)A[i].x=A[i].y=B[i].x=B[i].y=;
for(int i=;i<mm;i++)A[i].x=a[i]*a[i];
for(int i=;i<nn;i++)B[i].x=b[i]*b[i];
FFT(A,),FFT(B,);
for(int i=;i<n;i++)ans[i]=ans[i]-A[i]*B[i]-A[i]*B[i];
FFT(ans,-);
for(int i=mm-;i<nn;i++)if(fabs(ans[i].x)<)all++;
printf("%d\n",all);
for(int i=mm-;i<nn;i++)if(fabs(ans[i].x)<)printf("%d ",i-mm+);
}
BZOJ 4259 FFT的更多相关文章
- BZOJ 4259 残缺的字符串(FFT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4259 [题目大意] 给出两个包含*和小写字母的字符串,*为适配符,可以和任何字符匹配, ...
- BZOJ 4259: 残缺的字符串 [FFT]
4259: 残缺的字符串 题意:s,t,星号任意字符,匹配方案数 和上题一样 多乘上一个\(a_{j+i}\)就行了 #include <iostream> #include <cs ...
- BZOJ 4259 残缺的字符串 ——FFT
[题目分析] 同bzoj4503. 只是精度比较卡,需要试一试才能行O(∩_∩)O 用过long double,也加过0.4.最后发现判断的时候改成0.4就可以了 [代码] #include < ...
- bzoj 4259 4259: 残缺的字符串【FFT】
和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一个原串字符 有点卡常,先在点值下算最后一起IDFT #inclu ...
- BZOJ 2179 FFT快速傅立叶 题解
bzoj 2179 Description 给出两个n位10进制整数x和y,你需要计算x*y. [题目分析] 高精裸题.练手. [代码] 1.手动高精 #include<cstdio> # ...
- 【刷题】BZOJ 4259 残缺的字符串
Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同 ...
- BZOJ 2179: FFT快速傅立叶
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2923 Solved: 1498[Submit][Status][Di ...
- BZOJ 2179 FFT快速傅里叶
fft. #include<set> #include<map> #include<ctime> #include<queue> #include< ...
- BZOJ 4259 残缺的字符串
思路 同样是FFT进行字符串匹配 只不过两个都有通配符 匹配函数再乘一个\(A_i\)即可 代码 #include <cstdio> #include <algorithm> ...
随机推荐
- Percona Xtrabackup备份及恢复
1. http://www.percona.com/software/percona-xtrabackup下载并安装 2. 全量备份 a.全量备份到制定目录 innobacku ...
- OAuth网络协议
一.应用场景 为了理解OAuth的适用场合,让我举一个假设的例子. 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用该服务,必须让"云冲 ...
- Python之数据结构改造
{ "appList":[ { "id" : 120, "name" : "BIGDATA", "alias& ...
- res对象json,redirect
1.res.json() var express=require('express'); var app=express(); app.get('/',function(req,res){ //返回j ...
- 1.2、使用pip安装Python包
大多数 Python 包都使用 pip 实用工具安装,使用 virtualenv 创建虚拟环境时会自动安装 pip.激活虚拟环境后,pip 所在的路径会被添加进 PATH. 注:如果你在 Python ...
- vue全局使用axios的方法
在vue项目开发中,我们使用axios的二次封装,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from 'vu ...
- 使用VirtualBox实现端口转发,以SSH与Django为例
先来认识几个概念 (1)IP地址:又称为互联网协议地址,是计算机的物理地址,相当于计算机的编号,是32位的二进制数,通常被分割成4个8位的二进制数: (2)端口:指设备与外界通讯的接口,一台计算机的端 ...
- HRBUST 1214 方格取数
方格取数 Time Limit: 1000ms Memory Limit: 65535KB This problem will be judged on HRBUST. Original ID: 12 ...
- btrfs
https://docs.docker.com/storage/storagedriver/btrfs-driver/ $ sudo cat /proc/filesystems | grep btrf ...
- [bzoj1369][Baltic2003]Gem_树形dp_结论题
Gem bzoj-1369 Baltic-2003 题目大意:给你一棵树,让你往节点上添自然数,使得任意相邻节点的数不同且使得权值最小. 注释:n为结点个数,$1\le n\le 10^3$. 想法: ...