思路:

为什么好多字符串的题都可以用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的更多相关文章

  1. BZOJ 4259 残缺的字符串(FFT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4259 [题目大意] 给出两个包含*和小写字母的字符串,*为适配符,可以和任何字符匹配, ...

  2. BZOJ 4259: 残缺的字符串 [FFT]

    4259: 残缺的字符串 题意:s,t,星号任意字符,匹配方案数 和上题一样 多乘上一个\(a_{j+i}\)就行了 #include <iostream> #include <cs ...

  3. BZOJ 4259 残缺的字符串 ——FFT

    [题目分析] 同bzoj4503. 只是精度比较卡,需要试一试才能行O(∩_∩)O 用过long double,也加过0.4.最后发现判断的时候改成0.4就可以了 [代码] #include < ...

  4. bzoj 4259 4259: 残缺的字符串【FFT】

    和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一个原串字符 有点卡常,先在点值下算最后一起IDFT #inclu ...

  5. BZOJ 2179 FFT快速傅立叶 题解

    bzoj 2179 Description 给出两个n位10进制整数x和y,你需要计算x*y. [题目分析] 高精裸题.练手. [代码] 1.手动高精 #include<cstdio> # ...

  6. 【刷题】BZOJ 4259 残缺的字符串

    Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同 ...

  7. BZOJ 2179: FFT快速傅立叶

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

  8. BZOJ 2179 FFT快速傅里叶

    fft. #include<set> #include<map> #include<ctime> #include<queue> #include< ...

  9. BZOJ 4259 残缺的字符串

    思路 同样是FFT进行字符串匹配 只不过两个都有通配符 匹配函数再乘一个\(A_i\)即可 代码 #include <cstdio> #include <algorithm> ...

随机推荐

  1. dotnetnuke 中使用ado.net entityframework 如果在程序中动态调用系统的连接字符串信息

    1,打开如下图的Model1.Context.cs文件 2,找到 Base:(ConnString.conn)是我改的.默认生成的是"name=实体连接字符串" Connstrin ...

  2. javascript 基础知识点

    NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示 Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时 ...

  3. jquery-pjax

    项目介绍: Pjax是jQuery的一个插件,Pjax即pushState + Ajax,是实现无刷新Ajax加载并解决浏览器前进和后退问题的一个开源实现. 在2012年8月28日发布0.9版本. P ...

  4. 偏函数应用(Partial Application)和函数柯里化(Currying)

    偏函数应用指的是固化函数的一个或一些参数,从而产生一个新的函数.比如我们有一个记录日志的函数: 1: def log(level, message): 2: print level + ": ...

  5. C#—接口和抽象类的区别?

    一.接口 接口是指对协定进行定义的引用类型,其他类型实现接口,以保证它们支持某些操作.接口指定必须由类提供的成员或实现它的其他接口.与类相似,接口可以包含方法.属性.索引器和事件作为成员. 1.接口存 ...

  6. tomcat 热加载设置

    找到tomcat项目的apache-tomcat-8.0.30\conf\context.xml,打开进行编辑,把Context项中加上 reloadable="true" < ...

  7. Django—链接MySQL

    Djalgo基础配置方法 静态文件配置方法 1 所有的静态文件都放在 static 文件夹下,例如Bootstrap值类的第三方库,通常 static 文件下会创建 css image js 文件,用 ...

  8. Google Shell Style Guide

    转自:http://google.github.io/styleguide/shell.xml Shell Style Guide Revision 1.26 Paul Armstrong Too m ...

  9. open-ldap schema (2)

    schema介绍及用途 schema 是OpenLDAP 软件的重要组成部分,主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,并通过自身内部规范机制限定目录树条目所遵循的逻辑结构以及定义 ...

  10. Tp5 一次修改多个数据update

    //商城矿机设置 public function shop(){ if(!request()->isPost()){ return $this->fetch(); }else { $myd ...