和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一个原串字符

有点卡常,先在点值下算最后一起IDFT

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. using namespace std;
  6. const int N=1100005;
  7. int n,m,bt,lm,re[N],tot;
  8. long long x[N],y[N];
  9. double sm;
  10. char s[N],t[N];
  11. struct cd
  12. {
  13. double a,b;
  14. cd(double A=0,double B=0)
  15. {
  16. a=A,b=B;
  17. }
  18. cd operator + (const cd &x) const
  19. {
  20. return cd(a+x.a,b+x.b);
  21. }
  22. cd operator - (const cd &x) const
  23. {
  24. return cd(a-x.a,b-x.b);
  25. }
  26. cd operator * (const cd &x) const
  27. {
  28. return cd(a*x.a-b*x.b,a*x.b+b*x.a);
  29. }
  30. }a[N],b[N],c[N];
  31. void dft(cd a[],int f)
  32. {
  33. for(int i=0;i<lm;i++)
  34. if(i<re[i])
  35. swap(a[i],a[re[i]]);
  36. for(int i=1;i<lm;i<<=1)
  37. {
  38. cd wi=cd(cos(M_PI/i),f*sin(M_PI/i));
  39. for(int k=0;k<lm;k+=(i<<1))
  40. {
  41. cd w=cd(1,0),x,y;
  42. for(int j=0;j<i;j++)
  43. {
  44. x=a[j+k],y=w*a[i+j+k];
  45. a[j+k]=x+y,a[i+j+k]=x-y;
  46. w=w*wi;
  47. }
  48. }
  49. }
  50. if(f==-1)
  51. for(int i=0;i<lm;i++)
  52. a[i].a/=lm;
  53. }
  54. int main()
  55. {
  56. scanf("%d%d%s%s",&n,&m,t,s);
  57. for(int i=0,j=n-1;i<j;i++,j--)
  58. swap(t[i],t[j]);
  59. for(int i=0;i<n;i++)
  60. x[i]=(t[i]=='*')?0:t[i]-'a'+1,a[i].a=x[i]*x[i]*x[i];
  61. for(int i=0;i<m;i++)
  62. y[i]=(s[i]=='*')?0:s[i]-'a'+1,b[i].a=y[i];
  63. for(bt=0;(1<<bt)<=n+m;bt++);
  64. lm=1<<bt;
  65. for(int i=0;i<lm;i++)
  66. re[i]=(re[i>>1]>>1)|((i&1)<<(bt-1));
  67. dft(a,1),dft(b,1);
  68. for(int i=0;i<lm;i++)
  69. c[i]=c[i]+a[i]*b[i];
  70. for(int i=0;i<lm;i++)
  71. a[i]=cd(x[i],0),b[i]=cd(y[i]*y[i]*y[i],0);
  72. dft(a,1),dft(b,1);
  73. for(int i=0;i<lm;i++)
  74. c[i]=c[i]+a[i]*b[i];
  75. for(int i=0;i<lm;i++)
  76. a[i]=cd(x[i]*x[i],0),b[i]=cd(y[i]*y[i],0);
  77. dft(a,1),dft(b,1);
  78. for(int i=0;i<lm;i++)
  79. c[i]=c[i]-a[i]*b[i]*cd(2,0);
  80. dft(c,-1);
  81. for(int i=n-1;i<m;i++)
  82. if((int)(c[i].a+0.5)==0)
  83. tot++;
  84. printf("%d\n",tot);
  85. for(int i=n-1;i<m;i++)
  86. if((int)(c[i].a+0.5)==0)
  87. printf("%d ",i-n+2);
  88. return 0;
  89. }

bzoj 4259 4259: 残缺的字符串【FFT】的更多相关文章

  1. luoguP4173 残缺的字符串 FFT

    luoguP4173 残缺的字符串 FFT 链接 luogu 思路 和昨天做的题几乎一样. 匹配等价于(其实我更喜欢fft从0开始) \(\sum\limits_{i=0}^{m-1}(S[i+j]- ...

  2. Luogu P4173 残缺的字符串-FFT在字符串匹配中的应用

    P4173 残缺的字符串 FFT在字符串匹配中的应用. 能解决大概这种问题: 给定长度为\(m\)的A串,长度为\(n\)的B串.问A串在B串中的匹配数 我们设一个函数(下标从\(0\)开始) \(C ...

  3. P4173 残缺的字符串(FFT字符串匹配)

    P4173 残缺的字符串(FFT字符串匹配) P4173 解题思路: 经典套路将模式串翻转,将*设为0,设以目标串的x位置匹配结束的匹配函数为\(P(x)=\sum^{m-1}_{i=0}[A(m-1 ...

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

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

  5. 【BZOJ4259】残缺的字符串 FFT

    [BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时, ...

  6. 洛谷 P4173 残缺的字符串 (FFT)

    题目链接:P4173 残缺的字符串 题意 给定长度为 \(m\) 的模式串和长度为 \(n\) 的目标串,两个串都带有通配符,求所有匹配的位置. 思路 FFT 带有通配符的字符串匹配问题. 设模式串为 ...

  7. 【BZOJ】4259: 残缺的字符串 FFT

    [题意]给定长度为m的匹配串B和长度为n的模板串A,求B在A中出现多少次.字符串仅由小写字母和通配符" * "组成,其中通配符可以充当任意一个字符.n<=3*10^5. [算 ...

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

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

  9. BZOJ4259:残缺的字符串(FFT)

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

  10. P4173 残缺的字符串 fft

    题意:给你两个字符串,问你第一个在第二个中出现过多少次,并输出位置,匹配时是模糊匹配*可和任意一个字符匹配 题解:fft加速字符串匹配; 假设上面的串是s,s长度为m,下面的串是p,p长度为n,先考虑 ...

随机推荐

  1. 【转载】分布式RPC框架性能大比拼

    dubbo.motan.rpcx.gRPC.thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 ...

  2. 让你的eclipse实现写JAVA代码,HTML,CSS,JAVASCRIPT代码提示

    1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 改动Auto Activation triggers for java的值为:zj ...

  3. 组件接口(API)设计指南[2]-类接口(class interface)

    *返回文件夹阅读其它章节: http://blog.csdn.net/cuibo1123/article/details/39894477 类接口(class interface) 你能够參考MGTi ...

  4. DesiredSize,RenderSize&& Width ,ActualWidth

    做UI的时候刚入门,很多属性摸不着头脑,需要的功能和属性不能很快联系联想到,所以要慢慢积累UIElement 的DesiredSize 和 RenderSize UIElement 的DesiredS ...

  5. Android 代码写控件

    1.设置dialog弹出anthor public static SearchDialog getSearchDialog(Context context,OnDismissListener list ...

  6. wxpython中鼠标样式的获取与匹配

    在wxpython中定义有多种默认的鼠标样式,譬如:wx.CURSORCROSS wx.CURSORHAND等等, 此处按下不表,可以参考wxpython的samples里面自带的cursor例子 这 ...

  7. 全局钩子 实例(不使用DLL和使用DLL两种)

    大家应该都知道,全局消息钩子要依赖于一个DLL才能够正常工作.于是呢,我也就理所当在地认为全局钩子都要依赖于一个DLL才能正常工作的,我想大部分人肯定和我一样也这么认为的. 但实际上不是这样的.有某些 ...

  8. ZeroMQ 初步认识

    http://www.danieleteti.it/zeromq-for-delphi/ https://my.oschina.net/zeroflamy/blog/109457 http://zer ...

  9. mysql 发生系统错误1067

    一般是由配置文件错误语法不正确引起的,如my.ini本人在mysql mysql-5.6.29-winx64 配置过程中遇到“发生系统错误1067”主要由于下面两个目录写的格式不正确引起的正确写法如下 ...

  10. futimens函数的使用【学习笔记】

    #include "apue.h" #include <fcntl.h> int main(int argc,char *argv[]) { int i,fd; str ...