[CTS2023] 另一个欧拉数问题 解析

news/发布时间2024/5/11 18:51:24

题目大意

对于正整数 \(\alpha\), 考虑下述长为 \(\alpha n\) 的序列 \(a\):

  • 对于每个 \(k=1,\dots, n\), 序列 \(a\) 中出现了恰好 \(\alpha\)\(k\).
  • 对于 \(i < j\) 满足 \(a_i = a_j\), 那么对任意 \(i < k < j\), 有 \(a_k \geq a_i\).

我们称满足上述要求的序列是一个 \(n\) 阶的 \(\alpha\)-排列. 现在输入一个 \(n_0\)\(\alpha\)-排列 \(P\). 又给定 \(n, m\), 请你计算有多少 \(n\)\(\alpha\)-排列包含子序列 \(P\), 并且满足:

  • 总共有 \(m\) 个下标 \(i\) 满足 \(a_i > a_{i+1}\).

只需计算出这样的序列总数对 \(998244353\) 取模的结果.

解法概要

不难注意到, 对于输入的序列 \(P\), 我们只关心它具有多少个下标满足 \(a_i > a_{i+1}\), 记为 \(m_0\).

考虑将所有值为 \(n\) 的数插到序列中, 根据要求, 它们此时必须是相邻的, 分类讨论所插入的位置是否对 \(m\) 有所贡献, 得到递推式

\[F_{n,m} = (\alpha(n-1) + 1 - m)F_{n-1,m-1} + (m+1)F_{n-1,m}. \]

初始条件是 \(F_{n_0,m_0}=1\).

通过某些方法研究 \(\alpha=1\) 的情况, 发现答案的一行可以表为

\[(1-x)^{n+1}\left(\sum_{k=0}^\infty (k+1)^{n-n_0} \binom{k-m_0 + n_0}{n_0} x^k\right). \]

这个形式看起来具有美丽的结构. 考虑我们的递推系统, 在 \(\alpha=1\) 的情况下是

\[E_{n,m} = (n-m)E_{n-1,m-1} + (m+1)E_{n-1,m}. \]

如果我们填下了第 \(n_0\) 行, 如何计算出递推得到的 \(n\) 行? 根据前述答案的线性性, 我们应该这么做:

\[{\color{red}\frac{E_{n+1}}{(1-x)^{n+1}}}=\left(\frac{d}{dx}x\right)^{n-n_0}{\color{red}\left(\frac{E_{n_0}(x)}{(1-x)^{n_0+1}}\right)}. \]

类似地, 我们会发现对于一般的 \(\alpha\), 令 \(G_n(x) = xF_n(x) / (1-x)^{\alpha n + 1}\) 时, 我们将第 \(n\) 行到第 \(n+1\) 行的递推进行了变换
image
注意下面的变换是\(\boldsymbol{n}\) 无关的.

比较

\[E_{n} = xE_{n-1}', \quad G_n = \frac{x}{(1-x)^{\alpha-1}}G'_{n-1}. \]

我们不喜欢后者, 但喜欢前者, 因为前者的变换做 \(k\) 次, 只需要个快速幂.

所以要让后者变成前者. 直接设 \(G_n = H_n \circ y(x)\), 我们希望 \(H_n(y) = yH_{n-1}'(y)\). 方程会回应我们的希望, \(y\) 只需要是

\[\frac{x}{(1-x)^{\alpha-1}}y' \]

的解.

\(y\) 的复合逆是好求的 (但常数上是大头), 因此我们可以容易地算出 \(H_{n_0}(y)\) 的关于 \(y\) 的系数. 然后算出 \(H_{n}(y)\), 然后 Lagrange 反演公式计算 \(F_n(x)\) 的某一项的系数. 时间复杂度 \(O(n\log n)\).

若干注记

Remark 1 我们已经初步掌握了含参递推系统的一些基本的 trick, 第一步是消去参数, 第二步是把固定的线性变换做对角化.

See Also 1 比如这些 trick 立刻可以用来给 嘘月 做一个计算的解法...

See Also 2 https://www.luogu.com.cn/blog/your-alpha1022/qiu-xie-die-dai-lie-di-yi-suo-shou-fa

多余的话

  1. 本来这题被毙了啊, 但是由于某些原因另一位清华大学李姓长发毒瘤出题人被 ban 了, 所以要换一个题上...
  2. 这可能是我最不讲武德的一次出题... 大家笑一笑就好...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/34477080.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

CentOS8部署NextCloud+onlyoffice笔记

通过宝塔一键部署 一、安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 二、从宝塔Docker快速部署安装NextCloud。 一键部署,按照向导逐步安装 三、安装onlyoffice应用1、安装onlyoffice文…

Unix/Linux系统编程学习笔记二

学习笔记二 一、教材知识点总结 1. I/O库函数程序(1)fopen()使用字符串表示模式,其中"r"表示READ"w"表示WRITE。它返回一个指向FILE结构体的指针。fopen()首先发出open()系统调用来打开文件,以获取文件描述符编号fd。如果open0系统调用失败,则fopen()会…

应用层-常见协议

应用层概述:TCP/IP模型的最高层 直接为应用程序提供网络服务 常用的应用层协议:DNS HTTP SMPT与POP3/IMAP Telnet FTP与TFTP DNS协议: DNS(Domain Name System 域名解析系统)建立IP地址与域名之间的映射关系 将域名解析为IP地址 将IP地址解析为域名DSN解析过程:主机A向D…

C++实现论文查重

软件工程 https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014作业要求 根据给出的样例进行查重,并把结果记录在PSP表格中作业目的 对查重有一定的初步了解GitHub链接 https://github.com/xingch123456789/3119000414PSP表格PSP2.1 Personal Software Process S…