[cf1349f2]Slime and Sequences

  • 题目链接

    cf1349f2

  • 题目大意

    定义一个序列 (p) 合法当且仅当对于任意 (i>1)(i) 最后出现前出现了 (i-1)

    对于所有的 (iin[1,n]) ,求 (i) 在所有合法序列 (p) 中的出现次数和。

    答案对 (998244353) 取模。

    (nle 10^5)

  • 题解

    直接对着定义很不好搞,我们考虑构造一个双射 (f)

    不妨设 (i) 的出现位置为 (x_{i,1}<x_{i,2}dots<x_{i,s_i}) ,那么我们发现题目中的条件相当于是 (x_{i,s_i}>x_{i-1,1}) 。那么我们如果将这个位置序列这么排列 (x_{1,s_1},x_{1,s_1-1}dots,x_{1,1} x_{2,s_1}dots) ,就得到一个 (n) 阶排列,并且这和原序列一一对应。

    这个排列的相邻元素的大小关系确定,所以我们可以利用欧拉数求解(令 (k)(k+1) 的答案),有:

    [Ans_k=sum_{i=1}^nA(i,k)inom{n}{i}(n-i)! ]

    那么我们直接递推欧拉数((A(n,k)=(n-k)A(n-1,k-1)+(k+1)A(n-1,k)))就可以在 (mathcal O (n^2)) 的复杂度解决问题。

    当然这是远远不够的。

    考虑定义一个 (SA(n,k)) 表示至少有 (k) 个小于号的方案,那么有二项式反演:

    [A(n,k)=sum_{i=k}^n(-1)^{i-k}inom{i}{k}SA(n,i) ]

    考虑将排列中小于号的连成一段,那么可以得到:

    [SA(n,k)=n![x^n](e^x-1)^{n-k} ]

    代入原式,有:

    [Ans_k=sum_{i=1}^nsum_{j=k}^i(-1)^{j-k}inom{j}{k}SA(i,j)inom{n}{i}(n-i)!\ =sum_{i=1}^ninom{n}{i}(n-i)!i!sum_{j=k}^i(-1)^{j-k}inom{j}{k}[x^i](e^x-1)^{i-j}\ =n!sum_{j=k}^n(-1)^{j-k}inom{j}{k}sum_{i=j}^n[x^i](e^x-1)^{i-j}\ =(-1)^kfrac{n!}{k!}sum_{j=k}^nfrac{(-1)^jj!}{(j-k)!}[x^j]sum_{i=0}^{n-j}(frac{e^x-1}{x})^i ]

    那么我们只需要求出 ([x^j]sum_{i=0}^{n-j}(frac{e^x-1}{x})^i) 就可以直接卷积了。

    (F(x)=frac{e^x-1}{x}) ,那么有:

    [[x^j]sum_{i=0}^{n-j}F^i\ =[x^j]frac{1-F^{n-j+1}}{1-F}\ =[x^j]frac{1}{1-F}-[x^j]frac{F^{n-j+1}}{1-F}\ ]

    前面的可以直接做,后面的我们给 (F) 乘上 (x) ,有:

    [ [x^j]frac{F^{n-j+1}}{1-F}=[x^{n+1}]frac{(xF)^{n-j+1}}{1-F} ]

    有一个神奇的事情,就是我们可以加入一个元区分信息,得到:

    [[x^{n+1}]frac{(xF)^{n-j+1}}{1-F}\ =[x^{n+1}y^{n-j+1}]frac{(xyF)^{n-j+1}}{1-F}\ =[x^{n+1}y^{n-j+1}]sum_ifrac{(xyF)^i}{1-F}\ =[x^{n+1}y^{n-j+1}]frac{1}{1-F}frac{1}{1-xyF} ]

    所以我们就是要求一个以 (y) 为主元的多项式。

    然后我们考虑拉格朗日反演,设 (P(x)=xF(x),H(P(x))=F(x)) ,那么有 (frac{P(x)}{H(P(x))}=x)

    再设 (G(x)=frac{1}{1-H}frac{1}{1-xy}) ,那么有:

    [G(P)=frac{1}{1-H(P)}frac{1}{1-yP}=frac{1}{1-F}frac{1}{1-xyF}\ ]

    所以就是求 ([x^{n+1}]G(P)) ,设 (P(x)) 复合逆为 (T(x)) ,所以:

    [frac{P(T)}{H(P(T))}=T o frac{x}{T}=H ]

    直接反演得:

    [[x^{n+1}]G(P)=frac{1}{n+1}[x^{n}]G’left(frac{x}{T} ight)^{n+1}\ =frac{1}{n+1}[x^n]frac{y+H'-yH-xyH'}{(1-H)^2(1-xy)^2}H^{n+1}\ =frac{1}{n+1}[x^n]left(frac{y}{(1-H)(1-xy)^2}+frac{H'}{(1-H)^2(1-xy)} ight)H^{n+1}\ ]

    考虑提取 (y^m) 项系数:

    [frac{1}{n+1}[x^ny^m]left(frac{y}{(1-H)(1-xy)^2}+frac{H'}{(1-H)^2(1-xy)} ight)H^{n+1}\ =frac{1}{n+1}left([x^ny^m]frac{H^{n+1}}{1-H}sum_i(i+1)x^iy^{i+1}+[x^ny^m]frac{H'H^{n+1}}{(1-H)^2}sum_ix^iy^i ight)\ =frac{1}{n+1}left([x^{n-m+1}]frac{mH^{n+1}}{1-H}+[x^{n-m}]frac{H'H^{n+1}}{(1-H)^2} ight) ]

    那么问题就在于如何求 (H(x)) ,这可以直接构造:

    [P(x)=xF(x), H(P(x))=F(x)\ P(x)=e^x-1\ H(e^x-1)=frac{e^x-1}{x}\ H(x)=frac{x}{ln(x+1)} ]

    这样我们就做完了,复杂度 (mathcal O(nlog n))(mathcal O(nlog^2n)) ,取决于如何求快速幂。

    有些多项式求逆时常数项不为 (0) ,直接平移即可。

原文地址:https://www.cnblogs.com/leukocyte/p/14546484.html