• cojs 疯狂的字符串 题解报告


    首先这道题是GT考试的加强版本QAQ

    当n<k的时候,答案显然是10^n

    当n=k的时候,答案显然是10^n-1

    这样就有20分辣

    之后我们考虑k<=20的做法

    显然设f(i,j)表示前i位匹配到了第j位

    之后用KMP来转移就可以了

    如果不用矩阵乘法优化的话时间复杂度O(n*k*10)

    如果用矩阵乘法的话时间复杂度O(k^3logn)

    其实就是GT考试的做法辣

    这样就有50分了

    之后我们考虑用dp来容斥

    设fi表示前i位且第一次匹配的位置是[i-k+1,i]的方案

    不难发现fi=m^(i-k)-sigma(fj*m^(i-k-j))-sigma(fj)

    其中第一个fj保证j<=i-k

    第二个fj保证[i-k+1,j]这段前缀是数字串的一个后缀

    这个判定可以用哈希或者KMP解决

    这其实是一个卷积形式

    我们机智的构造一个多项式g来转移

    之后就可以做CDQ+FFT辣

    时间复杂度O(nlog^2n)

    可以得到100分了

    实际上我们移项之后可以得到

    m^(i-k)=sigma(fj*gi-j)

    构造多项式h

    得到h=f*g,则f=h*g^(-1)

    多项式求逆即可

  • 相关阅读:
    高一下期末考试划水记
    BZOJ 1053
    积性函数与狄利克雷卷积(未完待更)
    Contest Hunter 3101
    POJ2689
    3.17爆零赛
    全概率公式
    矩阵快速幂
    模板练习
    _rqy's Code Style for OI
  • 原文地址:https://www.cnblogs.com/joyouth/p/5598332.html
Copyright © 2020-2023  润新知