zoukankan      html  css  js  c++  java
  • BZOJ4503

    Portal

    Description

    BZOJ4259 - 残缺的字符串,双倍经验题
    但这题范围更小,时限更长!

    Code

    //两个串
    #include <algorithm>
    #include <complex>
    #include <cstdio>
    using std::swap;
    typedef std::complex<double> cpx;
    int const N=(1<<20)+10;
    double const PI=acos(-1);
    int n,m,a0[N],b0[N]; char s[N];
    int t,pos[N]; cpx a[N],b[N],c[N];
    void write(cpx x) {printf("(%.2lf %.2lf) ",x.real(),x.imag());}
    bool equal0(cpx x) {return (int)(x.real()+0.5)==0;}
    void FFT(cpx x[],int f)
    {
        for(int i=0;i<t;i++) if(i<pos[i]) swap(x[i],x[pos[i]]);
        for(int i=1;i<t;i<<=1)
        {
            cpx Wn=cpx(cos(PI/i),f*sin(PI/i));
            for(int j=0;j<t;j+=i+i)
            {
                cpx w=1;
                for(int k=0;k<i;k++,w=w*Wn)
                {
                    cpx p=x[j+k],q=w*x[j+k+i];
                    x[j+k]=p+q,x[j+k+i]=p-q;
                }
            }
        }
        if(f==-1) for(int i=0;i<t;i++) x[i]/=t;
    }
    void convo(int k1,int k2)
    {
        for(int i=0;i<t;i++) a[i]=pow(a0[i],k1);
        for(int i=0;i<t;i++) b[i]=pow(b0[i],k2);
        FFT(a,1),FFT(b,1);
        for(int i=0;i<t;i++) c[i]=a[i]*b[i];
    }
    cpx f[N]; int cnt,ans[N];
    int main()
    {
        scanf("%s",s); for(n=0;s[n];n++) b0[n]=s[n]^'?'?s[n]:0;
        scanf("%s",s); for(m=0;s[m];m++) a0[m]=s[m]^'?'?s[m]:0;
        t=1; int n0=0; while(t<=n+m) t<<=1,n0++;
        for(int i=0;i+i<=m;i++) swap(a0[i],a0[m-i-1]);
        for(int i=0;i<t;i++) pos[i]=(pos[i>>1]>>1)|((i&1)<<(n0-1));
        convo(3,1); for(int i=0;i<t;i++) f[i]+=c[i];
        convo(2,2); for(int i=0;i<t;i++) f[i]-=c[i]+c[i];
        convo(1,3); for(int i=0;i<t;i++) f[i]+=c[i];
        FFT(f,-1);
        int cnt=0;
        for(int i=m-1;i<n;i++) if(equal0(f[i])) ans[++cnt]=i-m+1; 
        printf("%d
    ",cnt); if(!cnt) return 0;
        for(int i=1;i<=cnt;i++) printf("%d ",ans[i]);
        puts("");
        return 0;
    }
    

    P.S.

    这题我都跑了12s+,4259恐怕是个卡常题...

  • 相关阅读:
    install cygwin
    Case When PK PIVOT
    SQL Server 2012 Features
    XMLHttpRequest 使用概括
    Html DOM 常用属性和方法
    Rewrite Path in Asp.Net MVC Project
    cefsharp
    线程
    ftp 相关知识集合
    数据库知识集合
  • 原文地址:https://www.cnblogs.com/VisJiao/p/BZOJ4503.html
Copyright © 2011-2022 走看看