• [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) ,直接平移即可。

  • 相关阅读:
    Elasticsearch Network Settings
    Spring Application Event Example
    hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
    快速自检电脑是否被黑客入侵过(Linux版)
    快速自检电脑是否被黑客入侵过(Windows版)
    WEB中的敏感文件泄漏
    Nginx日志分析
    关系型数据库设计小结
    软件开发的一些"心法"
    关于DNS,你应该知道这些
  • 原文地址:https://www.cnblogs.com/leukocyte/p/14546484.html
Copyright © 2020-2023  润新知