题解:Luogu P10004 [集训队互测 2023] Permutation Counting 2

news/2025/10/20 22:11:35/文章来源:https://www.cnblogs.com/P2441M/p/19153803

题意

给定 \(n\),对于所有 \(0\leq x,y<n\) 求有多少长度为 \(n\) 的排列 \(p\) 满足 \(\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]=x\)\(\sum\limits_{i=1}^{n-1}[p^{-1}_i<p^{-1}_{i+1}]=y\),答案对给定的质数模数 \(MOD\) 取模。\(1\leq n\leq 500\)

题解

半年前做的题了,补一下题解。

很神仙的计数题。

我们先考虑只有 \(p\) 的限制怎么做。考虑二项式反演,钦定 \(p\) 中有 \(x\) 个相邻上升对,相当于钦定 \(p\) 中有 \(n-1-x\) 个相邻下降对,而每个下降对可以视作新开一个连续上升段,所以这还相当于钦定原序列被分为 \(n-x\) 个上升段。可以发现,这等价于把 \(1,2,\cdots,n\) 划分成 \(n-x\) 个标号集合,于是方案数即为 \(\displaystyle{n\brace n-x}(n-x)!\)。套反演就可以计算答案。

回到原题,上面的做法启发我们做二元二项式反演。令 \(F_{i,j}\) 表示 \(p\) 中恰好有 \(i\) 个上升对、\(p^{-1}\) 中恰好有 \(j\) 个上升对的方案数,\(G_{i,j}\) 表示钦定 \(p\) 中有 \(i\) 个上升对、\(p^{-1}\) 中有 \(j\) 个上升对的方案数。根据二项式反演,

\[F_{i,j}=\sum_{x=i}^{n-1}(-1)^{x-i}\binom{x}{i}\sum_{y=j}^{n-1}(-1)^{y-j}\binom{y}{j}G_{i,j} \]

考虑如何计算 \(G_{i,j}\)。不妨尝试刻画 \(p^{-1}\) 中的 \(n-j\) 个上升段在 \(p\) 中表现为什么,根据定义,\(p^{-1}\) 中的一个上升段 \([l,r]\) 表示 \(p\)\(l,l+1,\cdots,r\) 的出现位置是单调递增的。接下来是很精妙的一步:对于 \(p^{-1}\) 中的每个上升段 \([l,r]\),我们考虑把 \(l,l+1,\cdots,r\) 依次插入 \(p\)\(n-i\) 个上升段中,并且我们只关心每个 \(p\) 的上升段中插入了多少个元素。我们发现这样确定了一种插入方案后,构成 \(p\) 的每个上升段的数集就确定了,那么自然 \(p\) 也就被确定了。而我们也不难通过一个确定的 \(p\) 反推插入方案,所以我们构造的映射是一种双射关系

进一步地,我们把这个双射放到矩阵上考虑:用 \(a_{x,y}\) 表示 \(p^{-1}\) 的第 \(y\) 个上升段中有多少数插入到了 \(p\) 的第 \(x\) 个上升段中。那么问题转化为给 \((n-i)\times (n-j)\) 的矩阵的每个格子上填非负整数,满足每行的和以及每列的和为正数,且填的数的总和为 \(n\),求方案数。

\(f_{i,j}\)\(i\times j\) 的矩阵的答案。我们再次套用二元二项式反演,设 \(g_{i,j}\) 表示 \(i\times j\) 的矩阵,只满足填的数非负且总和为 \(n\) 这个条件的方案数,插板可以得到 \(g_{i,j}=\dbinom{n+ij-1}{ij-1}\)。考虑枚举矩阵恰好有 \(i-x\) 行和 \(j-y\) 列的和为 \(0\),那么可以得到

\[g_{i,j}=\sum_{x=0}^{i}\binom{i}{x}\sum_{y=0}^{j}\binom{j}{y}f_{x,y} \]

因此可以反演回去:

\[f_{i,j}=\sum_{x=0}^{i}\binom{i}{x}(-1)^{i-x}\sum_{y=0}^j\binom{j}{y}(-1)^{j-y}g_{x,y} \]

显然 \(G_{i,j}=f_{n-i,n-j}\),这样我们就可以反演回去得到答案了!

直接做二元二项式反演是 \(\mathcal{O}(n^4)\) 的,需要优化。考虑分步卷积。以 \(f_{i,j}\) 为例,我们注意到第二个 \(\sum\) 内的式子只和 \(j,x\) 有关,我们 \(\mathcal{O}(n^3)\) 预处理 \(s_{j,x}=\sum\limits_{y=0}^j\binom{j}{y}(-1)^{j-y}g_{x,y}\),这样 \(f_{i,j}=\sum\limits_{x=0}^{i}\binom{i}{x}(-1)^{i-x}s_{j,x}\) 就同样可以 \(\mathcal{O}(n^3)\) 计算了。

时间复杂度 \(\mathcal{O}(n^3)\)。轻度卡常,可以 \(\mathcal{O}(n^2)\) 预处理组合数减少取模次数。

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

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

相关文章

题解:Luogu P4143 采集矿石

题意 给定长度为 \(n\) 的字符串 \(s\) 和权值序列 \(v\)。求所有子串 \(s[l,r]\) 使得 \(s[l,r]\) 在所有子串去重后的字典序降序排名,恰好等于 \(v[l,r]\) 的区间和。\(1\leq n\leq 10^5\)。 题解 注意到固定左端点…

从18w到1600w播放量,我的一点思考。

你好呀,我是歪歪。 前几天我想要巩固一下共识算法这个知识点。 (先声明,这篇文章不深入讨论共识算法本身) 于是我在 B 站大学上搜索了“共识算法”这个词:我还特意按照播放量排序了一下,准备先找个播放量高点的视…

扣一个细节问题

请看下这个uint bits = 0; for (int y = 0; y < 5; y++) {for (int x = 0; x < 4; x++)bits |= b[y][x] << (y * 4 + x);}上面的代码把一个[5][4]的byte数组用bits表示,该数组里的元素非0即1. 在经典的Th…

10.20java作业

10.20java作业1.2.3.4.5. 结果Parent: myValue = 10 Child: myValue = 20 Child: myValue = 20 Child: myValue = 20 Child: myValue = 21 第一行输出:new Parent() 创建父类对象,调用父类的 printValue 方法,输出父…

题解:Luogu P14175 【MX-X23-T5】向死存魏

题意 给定长度为 \(n\) 的序列 \(a\) 和值域 \(V\)。有 \(m\) 次操作:给定 \(l,r,x\),将 \(a[l,r]\) 中 \(=x\) 的数改为 \(0\)。 给定 \(x\),在序列末尾添加 \(x\)。 给定 \(l\),查询最小的 \(r\) 使得 \(a[l,r]\…

软工第三次作业————结对作业

软工第三次作业————结对作业软工第三次作业--结对作业 软工第三次作业结对作业——实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)项目作业 实现一个自动生成小学四则运算题目的…

Spring 常见注解

目录🧐 @Configuration 和 @Import 的核心区别详细解释1. @Configuration (配置类)2. @Import (引入)参考资料 🧐 @Configuration 和 @Import 的核心区别特性 @Configuration @Import主要目的 标记一个类是 Java 配…

题解:AtCoder ARC208C Mod of XOR

题意 给定 \(C,X\),构造一个 \(n(1\leq n<2^{60})\) 使得 \((n\oplus C)\bmod{n}=X\),或报告无解。多测,\(1\leq T\leq 2\times 10^5\),\(1\leq C,X<2^{30}\)。 题解 神人构造题。 显然要有 \(n>X\)。不妨…

题解:Luogu P6898 [ICPC 2014 WF] Metal Processing Plant

题意 给定 \(n\),对于每个 \(1\leq i,j\leq n\),给出 \(d(i,j)\)。对于集合 \(S\),定义 \(D(S)=\max\limits_{i,j\in S}d(i,j)\)。将 \(\{1,2,\cdots,n\}\) 划分为两个集合 \(A,B\),最小化 \(D(A)+D(B)\)。\(1\leq…

32-腾讯IM接入资料和定价

腾讯IM接入资料和定价信息 一、产品概述 腾讯云即时通信IM(Instant Messaging)是腾讯提供的企业级即时通讯服务,支持多种平台接入,包括Android、iOS、Web和小程序等。 二、定价信息 1. 基础服务资费体验版: 提供完…

题解:AtCoder ARC207A Affinity for Artifacts

题意 给定长度为 \(n\) 的序列 \(a\) 和一个数 \(X\),求有多少种 \(a\) 的重排 \(b\) 使得 \(\sum\limits_{i=1}^n\max(b_i-i+1,0)\leq X\)。\(1\leq n\leq 100\),\(1\leq a_i,X\leq 10^9\)。 题解 你说得对,但我怎…

题解:Luogu P9260 [PA 2022] Miny

题意 给定一棵 \(n\) 个点的树,第 \(i\) 条边 \((a_i,b_i)\) 有边权 \(c_i\),第 \(i\) 个点有一个爆炸半径 \(r_i\)。当一个点被引爆时,所有在该点爆炸半径范围内的点也会被引爆,这些新的被引爆的点也可能继续引爆…

题解:Luogu P13544 [OOI 2022] Serious Business

题意 给定一个 \(3\times n\) 的网格,每个格子 \((i,j)\) 内有一个数 \(a_{i,j}\)。一个人初始分数为 \(0\),在位置 \((1,1)\) 处,每次可以向右或向下走一格,目标是到达 \((3,n)\)。当走到格子 \((i,j)\) 时,这个…

题解:Luogu P14254 分割(divide)

题意 给定一棵 \(n\) 个点的树,设根节点 \(1\) 的深度为 \(1\)。给定 \(k\),求有多少从树中选出 \(k\) 个两两不同的节点,组成有序序列 \(b_1,\cdots,b_k\) 的方案,使得:对于每个 \(1\leq i<k\),\(1<d_{b_…

31_创蓝短信接入资料和定价

创蓝短信接入资料和定价 公司简介 创蓝云智为企业提供短信、语音外呼、闪验、号码检测、实名认证等通讯类产品,致力于让企业更高效高质量的获得用户及触达用户。 产品类型通知短信 会员营销短信 国际营销短信 验证码短…

构造单

题目来源 取模下序列构造 是否存在 \(3\) 个长度为 \(n\) 的 \([0,n)\) 的排列 \(a,b,c\),使得 \(a_i+b_i=c_i\mod n\) 遇到取模考虑奇偶性,不要像太复杂,考虑 \(n\) 为奇数的时候直接 \(a=b=~0,1,2,3,4,…\),\(c=…

02.Python百行代码实现抽奖系统

02.Python百行代码实现抽奖系统 ------------------------------------------------ 执行后——————————————————————————————————————————————————————————…

[笔记]高斯消元

高斯消元法是求解线性方程组的经典算法。 内容 求解如下的线性方程组(P3389 【模板】高斯消元法): \[\begin{cases} a_{1,1}x_1+a_{1,2}x_2+\dots+a_{1,n}x_n=b_1\\ a_{2,1}x_1+a_{2,2}x_2+\dots+a_{2,n}x_n=b_2\\ …

[SSH] scp:基于 SSH 的安全文件传输

[SSH] scp:基于 SSH 的安全文件传输$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 简介02 操作2.1 本地发送到远程2.2 从远程下载2.3 主机之间复制…

CSP-S 35

10.2010.20 神秘%你赛,rk1 170 ,你管这叫CSP-S? t1 赛时狂写t1 ,想了半天想出来个神秘做法,时间复杂度不会证但应该是对的,写完本地大阳历1.2s 感觉应该没啥大问题,结果空间炸了,最后2h写的代码和暴力分一样多 …