3.13校内测试

T1

\(GT\)考试加强版,\(n,m\)都改为\(10^5\),字符集大小(以下称为\(k\))改为\(10^9\),对\(998244353\)取模。

\(std\)给了一个暴力容斥的卷积优化,以及一个用\(border\)不超过\(log\)个等差数列的性质的前缀和优化。

不过这里要给出一个神仙做法。

\(orz~cx233666!!!\)

习惯性的,我们把长度为\(n\)的串(准考证号)叫做大串,长度为\(m\)的串(不吉利数字)叫做小串。

\(g_i\)表示大串前\(i\)位不出现小串的概率(以下称为成功),\(f_i\)表示大串第\(i\)位恰好第一次出现小串的概率(以下称为失败),那么答案就是\(g_i*k^n\)

对于一个成功的方案,下一步可能是成功或失败;对于一个失败的方案,它没法走下一步。所以显然有\(g_i=g_{i+1}+f_{i+1}\)

然而这个东西看上去好像没啥用啊,别着急,一会有妙用。

接着考虑这样一个问题:对于一个成功的方案,我们让它向后走\(m\)步,走出一个完整的小串插在后面,思考一下这部分意味着什么。

显然是走向失败了——但由于在走之前我们可能已经走出了小串的前面一部分,最后走上了小串的一个\(border\)导致提前失败,不过不要忘了我们还是强行让失败的继续走了剩下的步数。最终应当是所有走向失败的方案的总和。

那么就又有一个式子了:

\[g_i*k^{-m}=\sum_{j=1}^{m}[j∈border]f_{i+j}*k^{-m+j} \]

由于\(f,g\)的定义是概率,所以每一步都要乘上\(\frac1k\)

接着推上面的式子,把\(k\)消到右边:

\[g_i=\sum_{j=1}^{m}[j∈border]f_{i+j}*k^j \]

为了让右边看的更优美,并且具有某种性质,我们令\(a_{m-i}=[i∈border]k^i\),那么就变成了:

\[g_i=\sum_{j=0}^{m-1}a_{m-j}*f_{i+j} \]

容易发现我们这样做的目的:\(a\)的下标加上\(f\)的下标变成了一个定值\(i+m\),不绕弯子的说,就是有卷积的形式了。

我们稍微改一下以证明它确实是个卷积:

\[g_i=\sum_{j=0}^{i+m}a_{i+m-j}*f_j \]

由于\(a\)从第\(m\)项以后全部为\(0\),所以上式显然等价于之前的式子。

但正常的来说,应该是\(g_{i+m}\)等于上式才对啊,\(g\)的下标被搞成了\(i\)怎么办呢?

很简单,我们写出生成函数:

\(G(x)=\sum_ig_ix^i,F(x)=\sum_if_ix^i,A(x)=\sum_{i=0}^ma_ix^i\)

虽然\(g_i\)的次数不够,但我们可以强行补上:

\(x^mG(x)=A*F(x)\)

由于\(F\)的前\(m\)项没有值,所以右边这部分不管怎么卷都是\(0\)。也就是说,上式虽然左边前\(k\)项没有值,但右边也没有值,而从\(k+1\)项开始就满足上面那个式子了,所以不会出什么\(bug\)

再看我们最开始写出的式子,用同样的套路,把它用生成函数表示出来:

\(xG(x)+1=G(x)+F(x)\)

注意这次有常数项——后面有\(g_0=1\),但你前面乘了个\(x\)没常数项,所以要补上。

两个式子搞一块整理一下:

\[F(x)=\frac {x^mG(x)}{A(x)} \]

\[xG(x)+1=G(x)+\frac {x^mG(x)}{A(x)} \]

\[G(x)(\frac{x^m}{A(x)}+1-x)=1 \]

\[G(x)=\frac1{\frac{x^m}{A(x)}+1-x} \]

求逆在\(mod~x^{n+1}\)意义下进行。

显然\(a_0=k^m\)\(\frac{x^m}{A(x)}+1-x\)的常数项为\(1\),所以两次求逆都成立。

是不是相当妙啊?

T2

给出一张图,对于任何一个点集,我们把所有能够用点集中的点连出来的边进行计数,求每次计数的\(k\)次方和,\(n,m≤10^5,k≤3\)

几次方就是几条边在同时给答案贡献,那么我们强行分类讨论这几条边由几个点组成,三元环计数即可。

由于时间不够,强行一句话题解。

T3

给出一个字符串,求两个不交(但可以挨在一块)的区间使得它们拼起来是个回文串,求能拼出的最长回文串长度及位置,\(n≤5*10^5\)

跑一遍\(manacher\),求出所有回文中心的最长长度,假设回文中心在左边,那么问题就变成了从这个极长回文串的左边紧挨着连一个字符串,右边从某个位置选出一个\(reverse\)后相同的字符串,这个问题就是P4094 [HEOI2016/TJOI2016]字符串。然而我好像不会一个\(log\)的做法诶~

posted @ 2019-03-13 22:05  star_city  阅读(145)  评论(0编辑  收藏  举报