思路:

为什么好多字符串的题都可以用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. C#程序集版本控制文件属性祥解

    using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...

  2. (转)C#开发微信门户及应用(6)--微信门户菜单的管理操作

    http://www.cnblogs.com/wuhuacong/p/3701961.html 前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的 ...

  3. transparent

    transparent属性用来指定全透明色彩

  4. inherit 关键字使得元素获取其父元素的计算值

    它可以应用于任何CSS属性,包括CSS简写 all. 对于继承属性,inherit 关键字只是增强了属性的默认行为,只有在重载(overload)其它规则的时候被使用.对于非继承属性,inherit ...

  5. appium的等待

    在自动化过程中,元素出现受网络环境,设备性能等多种因素影响.因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已.那么如何解决这个问题呢? ...

  6. touch:命令创建文件

    touch:创建空文件或改变文件的时间戳属性 [功能说明] touch命令有两个功能:一是创建新的空文件:二是改变已有文件的时间戳属性 [语法格式] touch [option] [file] tou ...

  7. 58.fetch phbase

    1.fetch phbase工作流程 The coordinating node identifies which documents need to be fetched and issues a ...

  8. Problem 20

    Problem 20 问题网址:https://projecteuler.net/problem=20 n! means n × (n − 1) × ... × 3 × 2 × 1阶乘For exam ...

  9. 51nod——T1103 N的倍数

    题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. ...

  10. windows终端 进入文件夹

    盘符: 例如想进入D盘 d: cd 进入到当前盘某个目录.cd \ 进入当前盘根目录cd \windows 进入到当前盘Windows目录cd.. 退出到上一级目录 注:进入含有特殊字符目录时需要加引 ...