集美大学第九届程序设计竞赛 E(生成函数,莫比乌斯反演,斯特林数)
是一个非常恶心的推柿子题。。
用$f(d)$表示用了d个字符, 拼成长度为n的字符串的方案
$$f(d) = (e^x-1)^d[\frac{x^n}{n!}] \binom{n}{d}$$
用$g(d)$表示用了d个字符, 拼成长度为n的字符串对应的权重
$$g(d) = \frac{\sum_{i=n-d}^{min(n-d, n-1) + n - 1} lcm(i-(n-d)+1, n)}{n-d+1} \\ = \frac{1}{n-d+1} \sum_{i=1}^{n} lcm(i, n)$$
对于$h(n) = \sum_{i=1}^n lcm(i, n)$可以反演后$O(nlnn)$快速预处理
$$\sum_{i=1}^n lcm(i, n) \\ = n \sum_{i=1}^n \frac{i}{gcd(i, n)} \\= n \sum_{d|n} \sum_{d|i} i[gcd(i,n)=d] \\ = n \sum_{d|n} \sum_{d|i} i[gcd(\frac{i}{d}, \frac{n}{d}) = 1] \\ = n \sum_{d|n} \sum_{i=1}^d i[gcd(i,d)=1] \\ = n\sum_{d|n} \sum_{x|d}\mu(x) x \frac{\frac{d}{x}(\frac{d}{x}+1)}{2} \\ = n\sum_{d|n} \frac{d\phi(d)}{2}$$
考虑$f(d)$怎么求
$$\binom{n}{d} (e^x-1)^d[\frac{x^n}{n!}] \\ = \binom{n}{d} \sum_{j=0}^{d} \binom{d}{j} e^{jx}[\frac{x^n}{n!}] (-1)^{d-j} \\ = \binom{n}{d} \sum_{j=0}^{d} \binom{d}{j} j^n (-1)^{d-j} \\ = \frac{1}{(n-d)!} \sum_{j=0}^{d} \frac{n!}{j!(d-j)!} j^n (-1)^{d-j} \\ = \frac{n!}{(n-d)!} {n \brace d}$$
考虑怎么求$\sum_{d=1}^n f(d)g(d)$
$$\sum_{d=1}^n f(d)g(d) \\ = \sum_{d=1}^n h(n) \frac{n!}{(n-d+1)!} {n \brace d} \\ = h(n) \sum_{d=1}^n \frac{n!}{(n-d+1)!} {n \brace d} \\ = \frac{h(n)}{n+1} \sum_{d=1}^n \frac{(n+1)!}{(n+1-d)!} {n \brace d} \\ = \frac{h(n)}{n+1} \sum_{d=1}^n (n+1)^{\underline{d}}{n \brace d} \\ = h(n) (n+1)^{n-1}$$
然后只需要调和级数预处理, 以及快速幂就行了
用到的几个trick
- $x^n = \sum_{i=0}^n {n\brace i} x^{\underline i}$
- $e^{dx}[x^n] = \frac{d^n}{n!}$
- $(e^x-1)^d[\frac{x^n}{n!}] = {n\brace d}d!$