cojs 疯狂的字符串 题解报告

Posted _Vertical

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

多项式求逆即可

以上是关于cojs 疯狂的字符串 题解报告的主要内容,如果未能解决你的问题,请参考以下文章

题解报告:hdu 1228 A+B

题解报告:hdu 1230 火星A+B

题解报告:hdu 2087 剪花布条(KMP入门)

南京理工大学第八届程序设计大赛(校外镜像)题解报告

2019.11.11 题解报告

$CSP$ $2019$ $Day2$ 模拟考试 题解报告