GP of Southeastern Europe 2021 & SEERC2021
GP of Southeastern Europe 2021
D. LIS Counting
给定 ,以及模数 。考虑所有满足 的排列,定义 表示满足 的排列个数。
你需要对于 均求出答案。
, 为质数。
Solution
考虑一个排列 ,记二元组 表示前缀 的 LIS 和 LDS,我们放置两个杨表 ,在 位置插 , 位置插 ,最终形成的杨表必定是 的。
容易发现这是双射,即我们固定一组 ,一定能得到 且 满足要求。
我们观察 杨表的性质。对于 而言,有行列均递增;对于 而言,有行递减,列递增。因此 杨表本质相同,下面我们只考虑计数 。
我们记 的第 行长度为 ,显然有 ,于是 这个 元组有 种可能,我们可以爆搜得到杨表的所有形态。
接下来,我们用 表示在杨表里放了 ,当前杨表的形态是 的方案数,转移是平凡的。
考虑答案怎么求,对于 而言,答案是 ,其中 数组表示有多少个杨表的 位置等于 ,该数组是好求的。
总时间复杂度 ,在 的时候最卡。
评测记录,这题超级没有素质,连个过的代码都没有。。
I. Colourful Permutation Sorting
给定排列 ,每个位置有一个颜色 ,一共有 种颜色。
现在,你可以做任意多次以下两种操作:
- 花费 的代价,交换任意两个数;
- 花费 的代价,随便排列颜色 的位置的数。
你需要用最小的代价使得排列满足 ,求代价。
。
Solution
首先,我们抽象这个问题:
有 个盒子,第 个盒子编号为 。有 个球,第 个球编号为 。
初始第 个盒子里放着第 个球。
- 1 操作:交换第 个盒子里的球和第 个盒子里的球;
- 2 操作:随便交换颜色 的盒子。
容易发现 1 操作和 2 操作是独立的,因此我们可以先执行 1 操作,最后再执行 2 操作,并且每种颜色至多进行一次操作 2。
于是我们 枚举哪些颜色进行了操作 2,给每个选的颜色开一个点,答案就是 选的颜色代价和 + ,我们目标是最大化环数。问题转化为一张 个点的有向图最多能分解成几个环。
我们不妨先去除自环和二元环,因为如果 不在一个环里,我们调整它们所在的两个环,答案不劣。
假如图只有 个点,那么由抽屉原理知,总出度 ,因此必定存在一个点出度为 ,即经过这个点的环必定走这条出边,因此我们直接把该点和出边缩起来,问题降到 个点的子问题。
现在图有 个点,可能会出现一个点的出度 ,此时它的入度至多为 (因为入度 + 出度 + 1 ),由于总边数是 量级的,我们暴力枚举其中一条出边的访问情况,问题又转化为 个点的子问题。
时间复杂度 。
M. Many LCS
构造两个 01 串 ,满足它们的公共子序列数 。
,你需要满足 。
时间限制 ,空间限制 。
Solution
一种很新颖的 idea(感谢 @YLWang 的指导):
我们构造 ,其中有 段,第 段的 个数为 ;,其中有 个 。满足 。
我们要让它们的 LIS 做到 ,即 中的 均取,然后每段中取 个 ,满足 。显然,对于不同的 取法,对应不同的最长 LIS。
对于合法的 序列计数,我们可以考虑容斥哪些 来计算。但为了方便,我们不妨假设 ,这样就不存在至少两个 爆限制的情况,方案数就简化为:
当我们取 的时候,这里的五个组合数基本上可以遍历 的所有数。因此我们找到最小的 满足 ,然后用 01 背包找出 即可。如果当前 不满足,我们试试看 ,依次类推,这里的移动次数极少。
但是存在一个问题:我们需要满足 ,当 较小时 也较小,可能导致构造不出解。
幸运的是,当 较小的时候,我们取 ,构造 ,, 中每段 的个数为 , 中的 的个数为 即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)