2025.2.15 NOIP 模拟赛 T2

news/2025/2/15 21:03:42/文章来源:https://www.cnblogs.com/XP3301Pipi/p/18717403

2025.2.15 NOIP 模拟赛 T2

Descreption

对满足以下条件的 排列 计数:

  • 长度为 \(n\) 且逆序对数恰好为 \(n\)

答案对 \(10^9+7\) 取模。

\(\mathcal{O(n^2)}\) Solution

\(f_{i,j}\) 为长度为 \(i\) 的排列,逆序对数恰好为 \(j\) 的方案数。

假如已经计算出了长度为 \(i-1\) 的答案,现在考虑如何计算 \(i\) 的贡献。

考虑将 \(i\) 这个数字插入到某一处。显然现在 \(i\) 就是排列中最大的数字,那么如果它后面有 \(k\) 个数字,就会产生 \(k\) 个新逆序对。最少产生 \(0\) 个,最多产生 \(i-1\) 个。

那么有转移:\(f_{i,j}=\sum_{k=min(j-(i-1),0)}^j f_{i-1,k}\),前缀和优化可以做到 \(O(n^2)\)

\(O(n \sqrt{n})\) Solution

由 $O(n^2) $ 做法拓展。

做一个题意转化:

  • \(n\) 个未知数 \(x_1,x_2,...x_n\),求 \(\sum x_i=n\)\(x_i<i\) 的非负整数解个数。

正确性显然。

套路地考虑容斥,枚举使得 \(x_i\geq i\)\(i\) 的集合 \(S\),那么 \(S\) 中的元素至少已经占据了 \(Sum(S)\) 个位置。

此时又有了一个子问题:求 \(\sum x_i=n-Sum(S)\) 的非负整数解个数。隔板法可解。

答案为:

\[\sum_{S\subseteq\{1,2,...,n\}} (-1)^{|S|} \binom{n-Sum(S)+n-1}{n-1} \]

若直接枚举集合 \(S\),效率未免太低。注意到若两个集合的元素总和与大小相同,则两个集合等价。

那么设另一个 dp:\(f_{i,j}\) 表示选择了 \(i\) 个数字,总和为 \(j\) 的集合数量。

注意到集合中的数字必须两两不同,那么集合大小不会超过 \(\sqrt{2n}\)

接下来考虑转移。我们每次向集合中加入一个最小值,不妨钦定为 \(1\)。为了避免重复,我们先将原集合中所有数字加一,然后再加入。

但集合最小值可以不为 \(1\)。我们只需接着把新集合所有元素向上平移若干次即可。

得到转移:

  1. \(f_{i,j} \rightarrow f_{i+1,j+i+1}\)
  2. \(f_{i,j}\rightarrow f_{i,j+i}\)

最终的答案化为:

\[\sum_{i\geq 0} \sum_{j=1}^{n} (-1)^i \binom{2n-j-1}{n-1} f_{i,j} \]

代码很简单,懒得粘了。

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

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

相关文章

使用 Git 命令和 Github 前须了解的知识

本文不包括 Git 命令的介绍与使用,只分享 Git 的关键概念与 Github 项目的基本工作流程。作者相信先了解它们对后续的学习和工作大有裨益。(如有错误和建议请大家评论告知)版本控制系统 VCS → Version Control System,版本控制系统 → 一个跟踪文件变化、记录修订情况、协…

leetcode hot 02

解题思路:找祖先从底向上递归后序遍历查找,遇到p,q或者空节点就直接返回对应值,当某个节点的左子树、右子树都返回了值,那么就说明该节点就是最近祖先节点,然后把该节点的值继续往上传,直到根节点返回结果。 /*** Definition for a binary tree node.* public class Tre…

Linux介绍及使用

一、linux介绍 1、Linux是一个免费、开源的操作系统,能多用户、多任务、支持多线程和多CPU的操作系统,相对windows更加稳定,在unix系统的基础上开发的系统; 注解:(1)免费:不要钱 (2)源代码公开 (3)多用户 :可以在不同用户操作 (4)多任务:同时执行多个任务 …

Maven 生命周期 Test 阶段遇到的一些问题

Q:无法使用@Test注解,报错 A:最初pom.xml中使用的Junit版本为3,Java 5于 2004 年发布,引入了注解作为语言的一部分。而Junit 3 是在这之前发布的,因此它无法使用注解,将pom.xml中的版本号改为<version>4.13.2</version>后问题解决,可使用@TestQ:在Maven启…

18. 信号

一、什么是信号在 Linux 中,信号是一种用于通知进程发生了某种事件的机制。信号可以由内核、其它进程或者命令行工具发送给目标进程。Linux 系统中由多种信号,每种信号都用一个唯一的数值表示。例如,常见的信号如下:SIGINT (2):这是当用户在终端按下 Ctrl+C 时发送给前台进…

【专题】DeepSeek技术颠覆or创新共赢,开启Al算法变革元年报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=39544 在科技飞速迭代的当下,人工智能领域正经历着深刻变革,AI Agent 的发展尤为引人瞩目。 随着数字化进程的加速,全球数据量呈指数级增长,如同为 AI Agent 的发展提供了丰沃土壤。海量数据不仅为模型训练提供了坚实基础,更驱动着 AI A…

Python梯度提升模型GBM生态学研究:SFS、RandomizedSearchCV预测黑腿蜱种群分布丰度可视化-

全文链接:https://tecdat.cn/?p=39232 原文出处:拓端数据部落公众号 广义线性模型一直是揭示自然种群分布和丰度背后生态过程的基础统计框架。然而,随着环境和生态数据的快速增长,分析这些大规模数据集需要更先进的统计方法。梯度提升树等现代机器学习框架,能有效识别复杂…

9.7.5 预测

这里的预测过程不是图\(9\)-$14,应该是下面这幅图,这里有误

【第四期书生大模型实战营】L0G4000 玩转「HF/魔搭/魔乐」等平台

闯关任务 闯关任务需要在关键步骤当中截图!任务 描述 时间模型下载 使用Hugging Face平台、魔搭社区平台(可选)和魔乐社区平台(可选)下载文档中提到的模型(至少需要下载config.json文件、model.safetensors.index.json文件),请在必要的步骤以及结果当中截图。 20min模型…

Linux驱动---中断上下半部

文章介绍了中断的上下半部机制,重点分析了下半部的实现方式,如软中断、tasklet和工作队列。目录一、中断上下半部二、下半部实现机制2.1、定时器2.2、软中断2.3、任务队列2.4、工作队列2.5、内核线程 一、中断上下半部 在上一篇文章按键驱动中,代码做了一个这样的设计。大家…