CF1349F 【Slime and Sequences】part2
由于本文过长,\(\LaTeX\) 炸了,分两篇,part1
优化
我们假装不会欧拉数的通项式(其实是因为它的通项式不容易继续优化?),使用容斥代替掉欧拉数
设 \(\begin{vmatrix}n\\k\end{vmatrix}\) 表示长度为 \(n\) 的排列,至少有 \(k\) 个小于号的方案数
容易发现,\(\begin{vmatrix}n\\k\end{vmatrix}=\sum\limits_{i=k}^n\dbinom ik\left<\begin{matrix}n\\i\end{matrix}\right>\)
二项式反演一下可以得到:\(\left<\begin{matrix}n\\k\end{matrix}\right>=\sum\limits_{i=k}^n(-1)^{i-k}\dbinom ik\begin{vmatrix}n\\i\end{vmatrix}\)
考虑计算 \(\begin{vmatrix}n\\k\end{vmatrix}\),我们将小于号视为一条边,则至少有 \(n-k\) 个连通块,这些连通块内的顺序是确定的,因为是用小于号连接的
由于是排列问题,则答案为每个块的 \(\mathbf{EGF}\) 卷起来
每个块的 \(\mathbf{EGF}\) 为 \(\mathbf{EGF\{[0,1,1,\cdots]\}}=e^x-1\),为什么常数项为 \(0\)?一个块至少要有一个数字嘛
则 \(\begin{vmatrix}n\\k\end{vmatrix}=n![x^n](e^x-1)^{n-k}\)
代入可得(\(ans_0\) 特判一下,下面就没有 \(\max(k,1)\)了):
ans_k&=\sum\limits_{i=k}^n\dbinom ni(n-i)!\sum\limits_{j=k}^i(-1)^{j-k}\dbinom jki![x^i](e^x-1)^{i-j}\\
&=\sum\limits_{i=k}^n\dbinom ni(n-i)!i!\sum\limits_{j=k}^i(-1)^{j-k}\dbinom jk[x^i](e^x-1)^{i-j}\\
&=n!\sum\limits_{i=k}^n\sum\limits_{j=k}^i(-1)^{j-k}\dbinom jk[x^i](e^x-1)^{i-j}\\
&=n!\sum\limits_{j=k}^n(-1)^{j-k}\dbinom jk\sum\limits_{i=j}^n[x^i](e^x-1)^{i-j}\\
&=\dfrac{n!}{k!}\sum\limits_{j=k}^n\dfrac{(-1)^{j-k}j!}{(j-k)!}\sum\limits_{i=j}^n[x^i](e^x-1)^{i-j}\\
\end{aligned}\]
设 \(R_j=\sum\limits_{i=j}^n[x^i](e^x-1)^{i-j}\)
ans_k&=\dfrac{n!}{k!}\sum\limits_{j=k}^n\dfrac{(-1)^{j-k}j!}{(j-k)!}R_j\\
&=\dfrac{n!}{k!}\sum\limits_{j=k}^n\dfrac{(-1)^{j-k}}{(j-k)!}\times R_j\cdot j!
\end{aligned}\]
这是一种特殊的卷积,求法参见关于一类特殊卷积的求法
问题转化为求出序列 \(R\)
我们发现 \(R_k\) 的定义式很难看,每一次取的系数都不是同一项的,把它改得漂亮一点:
R_k&=\sum\limits_{i=k}^n[x^i](e^x-1)^{i-k}\\
&=\sum\limits_{i=k}^n[x^k](\dfrac{e^x-1}x)^{i-k}\\
&=\sum\limits_{i=0}^{n-k}[x^k](\dfrac{e^x-1}{x})^i
\end{aligned}\]
把它化成封闭形式,设 \(F(x)=\dfrac{e^x-1}{x}\):
R_k&=\sum\limits_{i=0}^{n-k}[x^k]F^i(x)\\
&=[x^k]\left(\dfrac{1-F^{n-k+1}(x)}{1-F(x)}\right)\\
&=[x^k]\dfrac{1}{1-F(x)}-[x^k]\dfrac{F^{n-k+1}(x)}{1-F(x)}
\end{aligned}\]
对于前一项,我们可以多项式求逆,但是发现分母常数项为 \(0\),不能直接求逆
那怎么做呢?我们转为求 \(\dfrac{1}{(1-F(x))\cdot x^{-1}}\cdot x^{-1}\),这样就可以避免常数项为 \(0\) 的问题了(由于该式中分母一次项不为 \(0\),所以乘上 \(x^{-1}\) 表示左移一位)
对于正确性的说明,需要引入抽象代数中的分式环(分式域)概念,不展开了,可以百度搜索拉格朗日反演学习一下
则我们只需要求出后一项就做完了,设 \(S_k=[x^k]\dfrac{F^{n-k+1}(x)}{1-F(x)}\)
我们发现 \(S_k\) 很不优美,对于每一个 \(k\),它的多项式长得都不一样,这样我们不可能在低于 \(O(n^2)\) 的时间复杂度内求出
所以我们考虑引入一个新的限制 \(y\),并消除 \(x\) 的影响:
S_k&=[x^k]\dfrac{F^{n-k+1}(x)}{1-F(x)}\\
&=[x^{n+1}]\dfrac{(xF(x))^{n-k+1}}{1-F(x)}\\
&=[x^{n+1}y^{n-k+1}]\sum\limits_{i=0}^{\infty}\dfrac{(xF(x))^{i}}{1-F(x)}\\
&=[x^{n+1}y^{n-k+1}]\dfrac{1}{1-F(x)}\cdot\dfrac{1}{1-xF(x)y}\\
\end{aligned}\]
即求出右面多项式 \([x^{n+1}]\) 项关于 \(y\) 的多项式,容易联想到多项式复合科技
但是不太行,因为 \(1-xF(x)y\) 中不仅有 \(F(x)\) 还有 \(x\)
考虑构造两个函数 \(H(x),W(x)\),使得 \(H(W(x))=\dfrac{1}{1-F(x)}\cdot\dfrac{1}{1-xF(x)y}\)
再构造一个函数 \(G(x)\),使得 \(G(W(x))=x\),这样我们就可以使用扩展拉格朗日反演求解了
构造如下:
\(W(x)=xF(x)\)
设 \(M(W(x))=F(x)\),即我们使用 \(M(x)\) 和 \(W(x)\) 复合来消除 \(W(x)\) 中的 \(x\)
则 \(\dfrac{1}{1-F(x)}\cdot\dfrac{1}{1-xF(x)y}=\dfrac{1}{1-M(W(x))}\cdot\dfrac{1}{1-W(x)y}\)
若要使得 \(H(W(x))=\dfrac{1}{1-F(x)}\cdot\dfrac{1}{1-xF(x)y}\),联系上一个式子,容易构造出 \(H(x)=\dfrac{1}{1-M(x)}\cdot \dfrac{1}{1-xy}\)
最后是 \(G(x)\),这个很简单,\(G(x)=\dfrac{x}{M(x)}\),因为此时 \(G(W(x))=\dfrac{xF(x)}{F(x)}=x\)
以上,我们构造出了拉格朗日反演所需的所有函数,直接套用扩展拉格朗日反演公式可得:
\]
暴力计算 \(H'(x)=\dfrac{y(1-M(x))+(1-xy)M'(x)}{(1-M(x))^2(1-xy)^2}\),代入:
[x^{n+1}]H(W(x))&=\dfrac1{n+1}[x^n]\dfrac{y(1-M(x))+(1-xy)M'(x)}{(1-M(x))^2(1-xy)^2}\cdot M^{n+1}(x)\\
&=\dfrac1{n+1}[x^n]\left(\dfrac{y}{(1-M(x))(1-xy)^2}+\dfrac{M'(x)}{(1-M(x))^2(1-xy)}\right)\cdot M^{n+1}(x)
\end{aligned}\]
写到这里,公式已经不能看了 qwq,我们把关于 \(y\)的封闭形式展开,这样我们就可以提取出 \(y\) 的某一项啦
[x^{n+1}]H(W(x))&=\dfrac1{n+1}[x^n]\left(\dfrac1{1-M(x)}\sum\limits_{i=0}^{\infty}(i+1)x^iy^{i+1}+\dfrac{M'(x)}{(1-M(x))^2}\sum\limits_{i=0}^{\infty}x^iy^i\right)\cdot M^{n+1}(x)\\
\end{aligned}\]
我们提取出第 \(m\) 项(\(S_k\) 需要的即第 \(n-k+1\) 项):
&\dfrac1{n+1}[x^ny^m]\left(\dfrac1{1-M(x)}\sum\limits_{i=0}^{\infty}(i+1)x^iy^{i+1}+\dfrac{M'(x)}{(1-M(x))^2}\sum\limits_{i=0}^{\infty}x^iy^i\right)\cdot M^{n+1}(x)\\
=&\dfrac1{n+1}[x^n]\left(\dfrac{mx^{m-1}}{1-M(x)}+\dfrac{M'(x)x^m}{(1-M(x))^2}\right)\cdot M^{n+1}(x)\\
=&\dfrac1{n+1}\left([x^{n-m+1}]m\dfrac{M^{n+1}(x)}{1-M(x)}+[x^{n-m}]\dfrac{M'(x)M^{n+1}(x)}{(1-M(x))^2}\right)
\end{aligned}\]
发现出现了和上面同样的问题:分母的常数项为 \(0\),我们同上面一样转化一下:
\]
突然发现我们还没有求 \(M(x)=\dfrac x{G(x)}\)
\(G(W(x))=G(e^x-1)=x\),容易构造出 \(G(x)=\ln(x+1)\)
则 \(M(x)=\dfrac x{\ln(x+1)}\)
最终时间复杂度 \(O(n\log n)\)
真是一道休闲的好题呢
CF1349F 【Slime and Sequences】part2的更多相关文章
- CF1349F 【Slime and Sequences】part1
由于本文过长,\(\LaTeX\) 炸了,分两篇,part2 题目描述 定义一个正整数序列为好序列,当且仅当如果某个数 \(k\) 出现过,那么一定有 \(k-1\) 在最后一个 \(k\) 的前面出 ...
- 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像
本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...
- 【模式识别与机器学习】——PART2 机器学习——统计学习基础——Regularized Linear Regression
来源:https://www.cnblogs.com/jianxinzhou/p/4083921.html 1. The Problem of Overfitting (1) 还是来看预测房价的这个例 ...
- 【字符串算法3】浅谈KMP算法
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...
- 【leetcode 字符串处理】Compare Version Numbers
[leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Com ...
- 【九度OJ】题目1442:A sequence of numbers 解题报告
[九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【夯实PHP基础】PHP数组,字符串,对象等基础面面观
本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...
- 【Java学习系列】第3课--Java 高级教程
本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...
随机推荐
- Django中的request到底有啥属性
Django中的request到底有啥属性呢 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函 ...
- python 并发专题(五):离散事件仿真(事件循环生成器)
出租车队运营仿真 创建几辆出租车,每辆车会拉几个乘客,然后回家.出租车首先驶离车库,四处徘徊,寻找乘客:拉到乘客后,行程开始:乘客下车后,继续四处徘徊. 程序解释 程序的输出示例: 创建 3 辆出租车 ...
- java 基本语法(十一) 数组(四)数组的常见算法
1.数组的创建与元素赋值: 杨辉三角(二维数组).回形数(二维数组).6个数,1-30之间随机生成且不重复. 杨辉三角 public class YHSJ { public static void m ...
- SQLAlchemy03 /外键、连表关系
SQLAlchemy03 /外键.连表关系 目录 SQLAlchemy03 /外键.连表关系 1.外键 2.ORM关系以及一对多 3.一对一的关系 4.多对多的关系 5.ORM层面的删除数据 6.OR ...
- 机器学习实战基础(三十):决策树(三) DecisionTreeRegressor
DecisionTreeRegressor class sklearn.tree.DecisionTreeRegressor (criterion=’mse’, splitter=’best’, ma ...
- hihoCoder 1037 数字三角形 最详细的解题报告
题目来源:hihoCoder 1037 数字三角形 解题思路:请好好看看 提示一.提示二.提示三 具体算法(java版,可以直接AC) import java.util.Scanner; public ...
- Ethical Hacking - NETWORK PENETRATION TESTING(1)
Pre--Connection-Attacks that can be done before connecting to the network. Gaining Access - How to b ...
- msf stagers开发不完全指北(四): msf 中使用域前置技术隐藏流量
msf 中使用域前置技术隐藏流量 前几篇都是说了下如何采用不同的语言开发 reverse_tcp 第二阶段,接下来将慢慢分析 reverse_http,这篇文章并不会围绕 stagers 进行讲解,这 ...
- 搭建sonarqube分析golang代码
准备postgres 为什么不使用Mysql呢,因为从7.9就不支持了 docker启动postgres docker run -d \ --name sonar-postgres \ -e POST ...
- Windows搭建Redis集群-详细教程
一.集群知识 1.集群的概念 所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定.高效的状态. 2.使用redis集群的必要性 问题:我们已经部署好了redis,并且能启动 ...