首页 > 其他分享 >闲话/社论 23.1.12

闲话/社论 23.1.12

时间:2023-01-12 22:57:12浏览次数:70  
标签:社论 12 frac 容斥 2x 系数 连续 23.1 极长

u 群看到的一道题
挺好玩的,写篇博客

参考资料:
20210620省队互测-qwaszx 题解, qwaszx ;
某篇没有链接的知乎回答, EI,Rebelz .

定义一个 \(1,2,\cdots,n\) 的排列是好的,当且仅当不存在长为 \(m\) 的连续段,使得其中相邻两项的差的绝对值为 \(1\)。给定 \(n,m\),计数好的排列。答案对 \(1e9 + 7\) 取模。

\(n\le 10^7\)。

容斥转生成函数。

使用如 CF1515E 的手法,我们可以将排列分割为数个极长的连续段,随后对每个连续段构造生成函数,枚举方案数 \(k\) 次幂之和即可。
然而我们会发现,两段极长的连续段相邻后可能会破坏极长的性质,这导致我们无法直接构造极长连续段的生成函数。

不妨从容斥的角度去着手,我们使用普通的连续段拼合成极长性质不会被破坏的极长连续段,这也就需要用到一组容斥系数来表示。我们设对应的容斥系数为 \(\langle f_i \rangle\),其 ogf 为 \(F\)。这个容斥系数的定义是由其作用确定的。也就是说,我们令 \(F\) 满足:一个长度为 \(k\) 的极长连续段的贡献为 \([x^k] \dfrac{1}{1 - F} = [l < m]\)。
定义导出了 \(F = \dfrac{x - x^m}{1 - x^m}\)。

我们可以发现,容斥系数 \(F[k]\) 其实就代表着 \(k\) 长度的连续段的贡献。因此考虑翻转的情况后就可以构造出连续段的 ogf

\[G(x) = F[1] + \sum_{k > 1} 2F[k] = 2F - F[1]x = \frac{2x - 2x^m}{1 - x^m} - x = \frac{x^{m + 1} - 2x^m + x}{1 - x^m} \]

当 \(m\) 较小时也可以直接构造 \(G\)。例如,当 \(m = 2\) 时可以观察 \(k\) 长度的连续段对答案的贡献,容易发现 \(k = 1\) 时为 \(1\),其余时刻容斥产生 \((-1)^{k - 1}\times 2\) 的系数。这导出了 \(\langle 0, 1, -2, 2, -2, 2, \cdots \rangle\) 的生成函数 \(\dfrac{x(1 - x)}{1 + x}\),对比系数即可。容易发现这和如上的形式是吻合的。或许通过归纳法也可以得到如上的 ogf 形式。

可以发现每一段都可以被最大值表示,这就可以使得决策 \(k\) 段即为决策 \(k\) 个数字。我们枚举段数 \(k\),随后通过 \(G^k(x)\) 得到 \(k\) 段连续段,最后分配 \(k\) 个数字得到答案

\[H(G(x)) = \sum_{k \ge 0} k! G^k(x) \]

到这里我们可以朴素地做多项式复合,但是复杂度仍然不够优秀。考虑采用整式递推技术。

我们可以发现 \(H(G(x))\) 微分有限。具体地,\(G(x)\) 是代数函数,因此被复合后可以保证微分有限。而 \(H(x)\) 的微分有限需要看出

\[\sum_{k \ge 0} k! x^k \]

是广义超几何函数形式,因此微分有限。具体地,我们可以套公式得到 \((1 - x)H(x) = x^2 H'(x) + 1\)。再化简一下就是

\[H'(x) = \frac{(1 - x)H(x) - 1}{x^2} \]

带入 \(x = G\) 得到

\[\frac{\text d H(G(x))}{\text d G(x)} = \frac{(1 - G(x))H(G(x)) - 1}{G^2(x)} \]

我们令 \(H'(G(x))\) 为 \(H\) 的导数带入 \(G(x)\) 的结果,有

\[H'(G(x)) = \frac{G'(x)}{G^2(x)}\left(H(G(x)) - G(x)H(G(x)) - 1\right) \]

我们仅对 \(m = 2\) 的情况简要推导,对于 \(m\) 较大的情况可以采用 ODE 自动机,让机器帮你算递推式。

将 \(m = 2\) 时的 \(G\) 带入,设答案的生成函数为 \(A\),有

\[A' = \frac{1 - 2x - x^2}{x^2 - 2x^3 + x^4}\left(A \times \frac{1 + x^2}{1 + x} - 1\right) \]

再次展开得到经典形式

\[(x^2 - 2x^3 + x^4)(1 + x) A' = (1 - 2x - x^2)(1 + x^2) A - (1 + x)(1 - 2x - x^2) \]

接着展开?

\[(x^2 - x^3 - x^4 + x^5) A' = (1 - 2x - 2x^3 - x^4) A + (x^3 + 3x^2 + x - 1) \]

经过一些对比系数我们可以得到

\[A[n] = (n + 1)A[n-1] -(n - 2) A[n - 2] - (n - 5) A[n - 3] + (n - 3) A[n - 4] \]

这也是 bzoj4321 的 \(O(n)\) 做法,\(A\) 数列又有 A002464 的名称。

目前我没有实现。

标签:社论,12,frac,容斥,2x,系数,连续,23.1,极长
From: https://www.cnblogs.com/joke3579/p/chitchat230112.html

相关文章

  • 解决MySQL导入SQL文件时“Row size too large (> 8126)”的问题
    用VSCode替换掉sql文件中所有ROW_FORMAT=COMPACT为ROW_FORMAT=DYNAMIC或者ROW_FORMAT=COMPRESSED。ROW_FORMAT=DYNAMIC和ROW_FORMAT=COMPRESSED的主要区别为ROW_FORMAT=CO......
  • 230112_50_SpringBoot入门
    springboot主启动类程序分析pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org......
  • 1.12 构造
    1710A-ColorthePicture题意给出n*m的矩阵和k中颜色,每种颜色有\(a_i\)个,要求矩阵每个单元都可以被涂上颜色且每个颜色相邻单元都至少有三个相同颜色,问是否可能思......
  • 0112总结
    四道题都比较套路,AK了。T1[模拟赛20230112]密接枚举区间的左端点,再枚举众数出现的次数,那么满足条件的右端点就是一段区间。令\(pos1_i\)为第一个出现\(i\)次的数的......
  • 2023/1/12 20221321杨渝学习打卡
    python入门学习学习链接:https://www.bilibili.com/video/BV14r4y1k7F9/?spm_id_from=333.999.0.0&vd_source=a989a1afa6cb8b6527dd9bf059d71439对集合,列表的操作对集合......
  • 2023.1.12 有源汇上下界最大流简笔
    警示2023.1.12[模板]有源汇上下界最大流错误点:1.建边方法简便:靠近于用u,v,w建边,不要冗杂多余(9-17行)2.算法注意点:首先抽出每条边的下界(每条边边权=上界-......
  • LeetCode刷题(12)~加一
    题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数0之外,这个整......
  • 1月12日内容总结——文件和文件索引、链接、系统时间、克隆、定时任务、paramiko模块
    目录一、文件相关信息二、文件索引信息三、链接信息四、系统时间五、机器克隆六、定时任务七、paramiko模块八、公钥私钥九、paramiko其他操作十、代码封装十一、面试题回......
  • 欧盟电动滑板车CE认证,EN17128测试标准详情
    电动滑板车是继传统滑板之后的又一新型滑板运动产品。电动滑板车节约能源,充电快速且续航能力强。整车造型美观、可以折叠,操作方便,驾驶更安全。电动滑板车起源于德国,发展于欧......
  • ORACLE ORA-12638:身份证明检索失败
    使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,......