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> ...
随机推荐
- C# 检测dll的新版本号方法
FileVersionInfo info = FileVersionInfo.GetVersionInfo(YourFileNameHere);string version = info.FileMa ...
- dispatch_sync:As an optimization, this function invokes the block on the current thread when possible
两件事情: 1.是否是一个线程: 2.queue task 的目标线程是否有未完成的task. 模型:一个线程处理当前的task还有通过gc d派发来的待执行task. 猜测: 如果目标thread上 ...
- Git及Github环境搭建(Windows系统)
一.github账号注册 1.打开网址https://github.com 注册账号: 二.本地安装Git 1.安装包下载地址:链接:https://pan.baidu.com/s/1smpnJL7 ...
- 另一个维度:cocos-2d VS vue
最近再看cocos-2d的东西,期间得到了同事和老板的支持,在此感谢.之前一直在做vue网页,现在看游戏cocos-2d这块,刚接触肯定有点不适应.cocos-2d多了很多感念:导演.场景.节点等.这 ...
- Fish:Linux中比bash或zsh更好用的Shell
Fish是一个智能且用户友好的命令行shell,适用于macOS,Linux和其他家族.fish包含语法突出显示.根据你键入字符自动提示autosuggest-as-type和花式选项卡完成等功能,无 ...
- 团体程序设计天梯赛-练习集-*L1-043. 阅览室
L1-043. 阅览室 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过100 ...
- PAT_A1150#Travelling Salesman Problem
Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...
- UI Testing
UI Test能帮助我们去验证一些UI元素的属性和状态.Apple 在 Xcode 7 中新加入了一套 UI Testing 的工具,其目的就是解决自动化UI测试这个问题.新的 UI Testing ...
- LINUX - .so 与 .a
.a gcc -c test1.c test2.c(或者g++ -c test1.cpp test2.cpp )--- .o ar -r libtest.a test1.o test2.o ...
- sqlserver 和MySQL的一些函数的区别
相同的表数据在sqlserver和MySQL中使用各自的函数得到相同的结果,如下表 drop table tb;create table tb(id int, value1 varchar(10), ...