问对于所有长为 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−xk​1​=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),求所有的答案是 Θ(n2log⁡n)\Theta(n^2\log n)Θ(n2logn)。

能不能再给力一点啊?


注意到我们实际上有两个算法,一个算法是 Θ(nlog⁡n)\Theta(n\log n)Θ(nlogn) 的求逆,一个算法是 Θ(n2/k)\Theta(n^2/k)Θ(n2/k) 的暴力求逆。那么我们显然应该选择当前最快的算法来跑。对于 k≤nlog⁡nk\le \frac n{\log n}k≤lognn​ 的时候是 Θ(nlog⁡n)\Theta(n\log n)Θ(nlogn) 更快一点,所以对于前 nlog⁡n\frac n{\log n}lognn​ 项,总共复杂度为 Θ(n2)\Theta(n^2)Θ(n2)。而对于后面的来说,根据调和级数更加精确的分析:Hn=ln⁡n+γ+O(1/n)H_n = \ln n + \gamma + O(1/n)Hn​=lnn+γ+O(1/n),因此从 nlog⁡n\frac n{\log n}lognn​ 到 nnn 求和,大约是 log⁡n−log⁡(n/log⁡n)=log⁡log⁡n\log n - \log(n/\log n) = \log\log nlogn−log(n/logn)=loglogn,因此将这两个算法混在一起使用,复杂度就降到了 Θ(n2log⁡log⁡n)\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>nlog⁡nk>\frac n{\log n}k>lognn​,那么 (n/k)c<(log⁡n)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(log⁡n)−1/ck\le n^{1-1/c}(\log n)^{-1/c}k≤n1−1/c(logn)−1/c 的部分使用 Θ(nlog⁡n)\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(log⁡n)−1/c=1c−1n2−1/c(log⁡n)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−c1​ncx1−c∣∣∣∣​x=L∞​=c−11​ncL1−c,L=n1−1/c(logn)−1/c=c−11​n2−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(log⁡n)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/3log⁡n)\Theta(n^{5/3}\log n)Θ(n5/3logn)。

关于「能不能再给力一点啊?」这件事,先鸽着,以后再说(

「营业日志 2020.12.10」Jiangly 的排列数数题相关推荐

  1. 成考期末计算机组成原理,2020年10月自考02318计算机组成原理真题及答案

    以下是湖南自考生网为考生们整理的"2020年10月自考02318计算机组成原理真题及答案",考生可通过自考试卷练习更有把握的面对考试,对题型更加熟悉,从而取得更佳的成绩.供考生参考 ...

  2. 3. 什么是icmp?icmp与ip的关系_「2020.12.3」黄俊捷热搜被爆料?郭俊辰交往女朋友?为什么三只跨年不合体?郝富申和王俊凯关系?Naomi和alracco?...

    "扒酱每日一爆料" 扒酱来了 ◆◆◆ [2020.12.3]虞书欣和小鬼有没有可能?周震南马伯骞的关系?<送你一朵小红花>有吻戏?仙剑里面的茂茂?美国留学回来在娱乐圈容 ...

  3. 云片荣膺WRE「年度最佳平台解决方案服务商」,推动零售业加“数”前行

    2022年8月24日,由WRE World Retail Elite主办的"第八届 WRE 零售数字化转型峰会"在上海万豪虹桥大酒店隆重召开.凭借在企业数字化赋能领域的卓越表现,云 ...

  4. 2020.12.10丨cufflinks 简介及使用说明

    一. 简介 Cufflinks下主要包含cufflinks,cuffmerge,cuffcompare和cuffdiff等几支主要的程序.主要用于基因表达量的计算和差异表达基因的寻找. Cufflin ...

  5. 2020.12.10(阴阳师照妖镜和御魂跑分器)

    原文链接: 江湖上失传已久的照妖镜和御魂跑分器,今天正式开源 - 自学编程的大好机会 作者:kiino 江湖上失传已久的照妖镜和御魂跑分器,今天正式开源 - 自学编程的大好机会 2020-04-28 ...

  6. 2020.12.10【读书笔记】丨Survey二代数据质控

    为什么进行Survey 分析? Survey方案 通过质控 . NT 比 对,获得高质量的 clean data ,为后续分析奠定良好基础. 基因组 Survey 基于小片段文库的低深度测序数据( 5 ...

  7. Java牛客专项练习2020.12.10

    TreeSet subset()方法: subset(from,true,to,true),返回从from元素到to元素的一个集合,true判断是否包含边境元素 Java与C++ Java与C++都有 ...

  8. 安卓牛客专项练习2020.12.10

    安卓Activity活动 Android的Activity活动中,我们一般可以归结为四种状态: 1.运行状态Running 2.暂停状态Paused 3.停止状态Stopped 4.销毁状态Destr ...

  9. 营业日志 2020.5.20

    今有 uoj 群友问到,如下式子如何快速计算: [ x n ] 1 ∏ i = 0 m ( 1 − ( u + v i ) x ) [x^n] \frac{1}{\prod_{i=0}^m (1 - ...

最新文章

  1. Linux系统程序运行时加载动态库路径顺序
  2. Spring boot切换Servlet容器
  3. 手机发送验证码的业务逻辑探究-主要是安全性,响应性
  4. 维护老客户,比发展新客户,成本要低得多
  5. 敏捷开发一千零一问系列之八:团队习惯了分工怎么办?
  6. js学习(六)- js对象创建
  7. rbf神经网络 c语言,RBF神经网络极简介绍及其算法R语言实现
  8. c语言实数的输出和占位_C语言输出格式总结
  9. 用python来开发webgame服务端(2)
  10. SRT (SubRip)字幕
  11. CF949A Zebras 构造
  12. Win10系统磁盘扩展分区与恢复分区
  13. 实现电脑文件自动同步到FTP
  14. IMCO正品行货机使用问题汇总与解答
  15. 考研报名时,需要准备哪些信息?
  16. 【Linux系统】Linux EXT2文件系统
  17. 考研复试c语言面试题,2019考研复试面试问题:你的最大缺点是什么
  18. 卷积深层网络+图像定位
  19. bzoj2683:简单题(树状数组套CDQ分分治)
  20. 硬盘存储FC光纤连接服务器显示脱机解决方法

热门文章

  1. 2020最新智能客服|聊天机器人算法、架构及应用分享
  2. springboot+shiro前后端分离过程中跨域问题、sessionId问题、302鉴权失败问题
  3. css网页布局小练习,文字案例,小米官网卡片案例
  4. zz 0ffice 2007 something.....
  5. 【第75篇】Wise-IoU:基于动态聚焦机制的边界框回归损失
  6. Java进行数据统计分析
  7. OFD转PDF(免费、不限次数、极速、安全)
  8. 博士申请 | 香港大学倪卓娴教授招收物联网与机器学习方向全奖博士生
  9. vue的简单使用3-v-for、v-if、v-show等指令的使用
  10. 盘点:中国历史上最杰出的“十位圣人”