联合省选 2021 B 卷题解
Day1
数对
给定 个正整数 ,请你求出有多少个数对 满足 ,, 且 是 的倍数。
,。
考虑使用桶,记 表示 的个数。
那么分两种情况讨论,第一种情况是 ,对答案的贡献为 ;第二种是 ,那么这时候枚举 的值 ,同时枚举 的倍数 ,对答案的贡献为 。
时间复杂度是经典的调和级数 。
卡牌游戏
有 张卡牌,第 张卡牌的正面有数字 ,背面有数字 ,初始时所有卡牌正面朝上。
现在可以将不超过 张卡牌翻面,最小化朝上的 个数字的极差。
,,, 单调不下降, 个数字互不相同。
先把 拼成一个长度为 的数组 排序。
对于这个有序的数组,极差即是选中的那一段 的 。
于是用双指针枚举 ,不在 当中则意味着那一位被删除,具体要求是:
- 删掉的 面不超过 ;
- 不存在同一张卡牌的 面同时被删除。
对于第一条开一个 维护,第二条开一个 数组维护即可。
时间复杂度 ,不明白 有序有什么意义。
图函数
对于一张 个点 条边的有向图 ,定义函数 :
- 初始化返回值 ,图 。
- 从 至 按顺序枚举顶点 ,如果当前的图 中,从 到 与从 到 的路径都存在,则将 ,并在图 中删去顶点 以及与它相关的边。
- 第 步结束后,返回值 即为函数值。
现在给定一张有向图 ,请你求出 的值。
更进一步地,记删除(按输入顺序给出的)第 到 条边后的图为 ,请你求出所有 的值。
,,,没有重边和自环。
因为只要求求出每个 ,而不是求具体的 ,所以考虑贡献法。
考虑一对 如果能对 造成贡献,当且仅当存在一条 的环,且这个环上没有编号 的点。
于是问题转化为对于 ,求 中有多少 ()满足存在 的环不经过编号 的点。
一个点对显然会对一个 的前缀造成贡献,令 表示最大化的 的路径上经过的边的编号的最小值。那么 会得到贡献。
可以直接 Floyd 或 Dijkstra 求出。
当然这不稳,可以考虑一个更高明的做法。枚举 ,在每张图中只保留 那些点,求出每张图中它能到达的点的个数即可。
当然直接这样模拟是 的,考虑反转时间轴变成逆序加边,对于一条新加的边 ():
- 如果 且 ,那么从 开始 BFS;
- 如果 且 ,那么先加到图中,等着以后可能有用;
- 否则这条边没有意义。
易证每一条边最多只会用到一次,所以在 BFS 的时候“过河拆桥”即可。时间复杂度 。
Day2
取模
给定 个正整数 请你在其中选出三个数 (,,),使得 的值最大。
,。
首先将 数组排序,逆序枚举 ,在前面做二分或者双指针求出 的最大值更新答案。
当 的时候就可以 break
了,可以证明枚举的 的个数是 级别的,但我不会证。
宝石
给定一棵大小为 的树以及 种宝石,结点 上有第 种宝石。
宝石收集顺序是一个长度为 的序列 , 中没有重复元素。
次询问,每次给出 ,问从 走到 的过程中,所经过的结点的 形成的序列与 的最长公共子序列的长度。
,,。
将 拆为 的两个过程。
考虑链上的情况,记结点 的后继 为其右边最近的满足 在 序列中恰好是 的下一项的 。
那么如果询问的 ,就从 右边的第一个 的位置开始,不断跳 ,直到越过 结束,跳的次数就是询问的答案。不难发现这个过程可以倍增优化。
现在搬到树上, 的过程不难套用上述方法,但如果考虑 呢?
一个解决办法是把过程拟过来,记录 为其父亲链上的最近的满足 在 序列中恰好是 的前一项的 。
每次询问的时候二分答案 ,从 上方的最近的 的那一个位置开始不断跳 就行了。
至于找到“ 上方的最近的 的位置”,可以使用可持久化线段树维护这个东西。
时间复杂度 。
滚榜
给定一个长度为 的数组 ,求有多少 的排列 ,满足存在一个 的不下降序列 ,使得对于任意 (),都有:
,,。
容易发现 的分配是贪心的,每次给出最小的 ,只要 就是合法的方案。
一个显然的结论是“当前选手想当 rank 1 只要比上一名选手高即可”,这是因为上一名选手是当前的 rank 1。
于是可得(忽略编号问题,这个显然是容易处理的):
- 如果 ,则 ;
- 如果 ,则 。
综合一下上面两个式子其实就是 。
进而通过考虑贡献可以知道 (每个贡献都是一个后缀)。
于是考虑状压 DP,用 表示,当前使用过的集合是 ,最后一个选的是 ,以及当前对 的贡献是 。转移的时候枚举接下来选哪一个人,计算一下贡献即可。
时间复杂度 ,轻微卡常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探