「营业日志 2020.12.10」Jiangly 的排列数数题
问对于所有长为 nnn 的排列,有多少排列存在一个连续上升段 ≥k\ge k≥k。对所有 kkk 回答,对大质数取模。
首先经过转化,只需要数所有连续段均 <k<k<k 的即可。容易想到容斥,我们可以先假设有一些基本单位,然后容斥掉它们拼起来的情况,可得基本单位是 x−xk1−x\frac{x-x^k}{1-x}1−xx−xk,其容斥单位为
1−11+x−xk1−x=1−1−x1−xk=x−xk1−xk=∑j≥0(xjk+1−x(j+1)k)\begin{aligned} &\quad 1-\frac 1{1+\frac{x-x^k}{1-x}}\\ &= 1-\frac{1-x}{1-x^k}\\ &= \frac{x-x^k}{1-x^k}\\ &= \sum_{j\ge 0} \left(x^{jk+1} - x^{(j+1)k}\right) \end{aligned} 1−1+1−xx−xk1=1−1−xk1−x=1−xkx−xk=j≥0∑(xjk+1−x(j+1)k)
而排列实际的拼接是 EGF 的形式,因此答案为
n![xn]11−∑j≥0(xjk+1(jk+1)!−x(j+1)k[(j+1)k]!)n![x^n] \frac 1{\displaystyle1 - \sum_{j\ge 0} \left( \frac{x^{jk+1}}{(jk+1)!} - \frac{x^{(j+1)k}}{[(j+1)k]!}\right)} n![xn]1−j≥0∑((jk+1)!xjk+1−[(j+1)k]!x(j+1)k)1
由于下面的项数有 Θ(n/k)\Theta(n/k)Θ(n/k) 项,因此暴力求逆的复杂度为 Θ(n2/k)\Theta(n^2/k)Θ(n2/k),求所有的答案是 Θ(n2logn)\Theta(n^2\log n)Θ(n2logn)。
能不能再给力一点啊?
注意到我们实际上有两个算法,一个算法是 Θ(nlogn)\Theta(n\log n)Θ(nlogn) 的求逆,一个算法是 Θ(n2/k)\Theta(n^2/k)Θ(n2/k) 的暴力求逆。那么我们显然应该选择当前最快的算法来跑。对于 k≤nlognk\le \frac n{\log n}k≤lognn 的时候是 Θ(nlogn)\Theta(n\log n)Θ(nlogn) 更快一点,所以对于前 nlogn\frac n{\log n}lognn 项,总共复杂度为 Θ(n2)\Theta(n^2)Θ(n2)。而对于后面的来说,根据调和级数更加精确的分析:Hn=lnn+γ+O(1/n)H_n = \ln n + \gamma + O(1/n)Hn=lnn+γ+O(1/n),因此从 nlogn\frac n{\log n}lognn 到 nnn 求和,大约是 logn−log(n/logn)=loglogn\log n - \log(n/\log n) = \log\log nlogn−log(n/logn)=loglogn,因此将这两个算法混在一起使用,复杂度就降到了 Θ(n2loglogn)\Theta(n^2\log\log n)Θ(n2loglogn)。(by Jiangly)
能不能再给力一点啊?
这个问题的 Ω(n2)\Omega(n^2)Ω(n2) 的 bound,是不可突破的吗?
我们刚刚实际上不仅求出了 k=1∼nk=1\sim nk=1∼n,还求出了更小的 nnn 的所有答案。但实际上我们并没有必要这么做。现在我们不妨假设有一个算法,他能在 Θ((n/k)c)\Theta((n/k)^c)Θ((n/k)c) 的复杂度内计算一个 kkk 对应的答案。容易发现在任何 kkk 的位置,Θ(n2/k)\Theta(n^2/k)Θ(n2/k) 的算法都是不占优的,因为若 k>nlognk>\frac n{\log n}k>lognn,那么 (n/k)c<(logn)c≪n<n2/k(n/k)^c < (\log n)^c \ll n < n^2/k(n/k)c<(logn)c≪n<n2/k。因此我们只需在 k≤n1−1/c(logn)−1/ck\le n^{1-1/c}(\log n)^{-1/c}k≤n1−1/c(logn)−1/c 的部分使用 Θ(nlogn)\Theta(n\log n)Θ(nlogn) 的算法,剩下的部分使用 Θ((n/k)c)\Theta((n/k)^c)Θ((n/k)c) 的算法。估界有
∑k>L(nk)c<∫L∞ncx−cdx=11−cncx1−c∣x=L∞=1c−1ncL1−c,L=n1−1/c(logn)−1/c=1c−1n2−1/c(logn)1−1/c\begin{aligned} &\quad \sum_{k>L} \left(\frac nk\right)^c\\ &< \int_L^\infty n^cx^{-c} \,\mathrm dx\\ &= \left.\frac 1{1-c}n^c x^{1-c}\right|_{x=L}^\infty\\ &= \frac 1{c-1}n^cL^{1-c},\quad L=n^{1-1/c}(\log n)^{-1/c}\\ &= \frac 1{c-1} n^{2-1/c}(\log n)^{1-1/c} \end{aligned} k>L∑(kn)c<∫L∞ncx−cdx=1−c1ncx1−c∣∣∣∣x=L∞=c−11ncL1−c,L=n1−1/c(logn)−1/c=c−11n2−1/c(logn)1−1/c
回顾我们要求的,无非是
n![xn]11−x−xk+1A(xk)−xkB(xk)n![x^n] \frac 1{1-x-x^{k+1}A(x^k)-x^kB(x^k)} n![xn]1−x−xk+1A(xk)−xkB(xk)1
经过这样的改写,我们不难考虑枚举三个部分的次数,显然这等价于如此求和:
∑u,v,w≥0(u+v+wu,v,w)UuVvWw\sum_{u,v,w\ge 0} \binom{u+v+w}{u,v,w} U^uV^vW^w u,v,w≥0∑(u,v,wu+v+w)UuVvWw
而我们提取系数 [xn][x^n][xn],这就固定了 xxx 项的次数,也就有
[xn]11−x−xk+1A(xk)−xkB(xk)=[xn]∑u,v,w≥0(u+v+wu,v,w)xu(k+1)+vk+wA(xk)uB(xk)v=[xn]∑u,v,w≥0(u+v+wu,v,w)[xn−u(k+1)−vk−w]A(xk)uB(xk)v\begin{aligned} &\quad [x^n] \frac 1{1-x-x^{k+1}A(x^k)-x^kB(x^k)}\\ &= [x^n]\sum_{u,v,w\ge 0} \binom{u+v+w}{u,v,w}x^{u(k+1)+vk+w}A(x^k)^uB(x^k)^v\\ &= [x^n]\sum_{u,v,w\ge 0} \binom{u+v+w}{u,v,w} [x^{n-u(k+1)-vk-w}] A(x^k)^uB(x^k)^v \end{aligned} [xn]1−x−xk+1A(xk)−xkB(xk)1=[xn]u,v,w≥0∑(u,v,wu+v+w)xu(k+1)+vk+wA(xk)uB(xk)v=[xn]u,v,w≥0∑(u,v,wu+v+w)[xn−u(k+1)−vk−w]A(xk)uB(xk)v
此时 A(xk)uB(xk)vA(x^k)^uB(x^k)^vA(xk)uB(xk)v 只有 kkk 的倍数次才有值,因此维护和求值都是只关于 n/kn/kn/k 的。
如使用暴力卷积,那么复杂度为 Θ((n/k)4)\Theta((n/k)^4)Θ((n/k)4),总复杂度是 Θ(n7/4(logn)3/4)\Theta(n^{7/4}(\log n)^{3/4})Θ(n7/4(logn)3/4)。
如这里使用 FFT,那么复杂度为 Θ((n/k)3log(n/k))\Theta((n/k)^3\log (n/k))Θ((n/k)3log(n/k)),总复杂度是 Θ(n5/3logn)\Theta(n^{5/3}\log n)Θ(n5/3logn)。
关于「能不能再给力一点啊?」这件事,先鸽着,以后再说(
「营业日志 2020.12.10」Jiangly 的排列数数题相关推荐
- 成考期末计算机组成原理,2020年10月自考02318计算机组成原理真题及答案
以下是湖南自考生网为考生们整理的"2020年10月自考02318计算机组成原理真题及答案",考生可通过自考试卷练习更有把握的面对考试,对题型更加熟悉,从而取得更佳的成绩.供考生参考 ...
- 3. 什么是icmp?icmp与ip的关系_「2020.12.3」黄俊捷热搜被爆料?郭俊辰交往女朋友?为什么三只跨年不合体?郝富申和王俊凯关系?Naomi和alracco?...
"扒酱每日一爆料" 扒酱来了 ◆◆◆ [2020.12.3]虞书欣和小鬼有没有可能?周震南马伯骞的关系?<送你一朵小红花>有吻戏?仙剑里面的茂茂?美国留学回来在娱乐圈容 ...
- 云片荣膺WRE「年度最佳平台解决方案服务商」,推动零售业加“数”前行
2022年8月24日,由WRE World Retail Elite主办的"第八届 WRE 零售数字化转型峰会"在上海万豪虹桥大酒店隆重召开.凭借在企业数字化赋能领域的卓越表现,云 ...
- 2020.12.10丨cufflinks 简介及使用说明
一. 简介 Cufflinks下主要包含cufflinks,cuffmerge,cuffcompare和cuffdiff等几支主要的程序.主要用于基因表达量的计算和差异表达基因的寻找. Cufflin ...
- 2020.12.10(阴阳师照妖镜和御魂跑分器)
原文链接: 江湖上失传已久的照妖镜和御魂跑分器,今天正式开源 - 自学编程的大好机会 作者:kiino 江湖上失传已久的照妖镜和御魂跑分器,今天正式开源 - 自学编程的大好机会 2020-04-28 ...
- 2020.12.10【读书笔记】丨Survey二代数据质控
为什么进行Survey 分析? Survey方案 通过质控 . NT 比 对,获得高质量的 clean data ,为后续分析奠定良好基础. 基因组 Survey 基于小片段文库的低深度测序数据( 5 ...
- Java牛客专项练习2020.12.10
TreeSet subset()方法: subset(from,true,to,true),返回从from元素到to元素的一个集合,true判断是否包含边境元素 Java与C++ Java与C++都有 ...
- 安卓牛客专项练习2020.12.10
安卓Activity活动 Android的Activity活动中,我们一般可以归结为四种状态: 1.运行状态Running 2.暂停状态Paused 3.停止状态Stopped 4.销毁状态Destr ...
- 营业日志 2020.5.20
今有 uoj 群友问到,如下式子如何快速计算: [ x n ] 1 ∏ i = 0 m ( 1 − ( u + v i ) x ) [x^n] \frac{1}{\prod_{i=0}^m (1 - ...
最新文章
- Linux系统程序运行时加载动态库路径顺序
- Spring boot切换Servlet容器
- 手机发送验证码的业务逻辑探究-主要是安全性,响应性
- 维护老客户,比发展新客户,成本要低得多
- 敏捷开发一千零一问系列之八:团队习惯了分工怎么办?
- js学习(六)- js对象创建
- rbf神经网络 c语言,RBF神经网络极简介绍及其算法R语言实现
- c语言实数的输出和占位_C语言输出格式总结
- 用python来开发webgame服务端(2)
- SRT (SubRip)字幕
- CF949A Zebras 构造
- Win10系统磁盘扩展分区与恢复分区
- 实现电脑文件自动同步到FTP
- IMCO正品行货机使用问题汇总与解答
- 考研报名时,需要准备哪些信息?
- 【Linux系统】Linux EXT2文件系统
- 考研复试c语言面试题,2019考研复试面试问题:你的最大缺点是什么
- 卷积深层网络+图像定位
- bzoj2683:简单题(树状数组套CDQ分分治)
- 硬盘存储FC光纤连接服务器显示脱机解决方法
热门文章
- 2020最新智能客服|聊天机器人算法、架构及应用分享
- springboot+shiro前后端分离过程中跨域问题、sessionId问题、302鉴权失败问题
- css网页布局小练习,文字案例,小米官网卡片案例
- zz 0ffice 2007 something.....
- 【第75篇】Wise-IoU:基于动态聚焦机制的边界框回归损失
- Java进行数据统计分析
- OFD转PDF(免费、不限次数、极速、安全)
- 博士申请 | 香港大学倪卓娴教授招收物联网与机器学习方向全奖博士生
- vue的简单使用3-v-for、v-if、v-show等指令的使用
- 盘点:中国历史上最杰出的“十位圣人”