联合省选 2022 解题报告
省选联考 2022 题解
D1T1 preprocessor
直接模拟。
D1T2 tree
极差不超过 ,考虑计算树上路径选值中最小值为 的方案:
将所有 对 取交后的答案减去 对 取交的答案即可。
容易编一个树形 dp 做到 ,拿到 40pts。
考虑值域很大的情况进行离散化。
求得所有 的答案可以考虑离散化端点:。
对于相邻的端点内满足 对其取交的结果的长度关于 的取值呈一次函数。
容易分析出 的答案在区间内为关于 的一个 或者 次函数。
拉插即可,时间复杂度 。
D1T3 community
D2T1 card
首先将所有卡牌丢进 的桶里。
由于一个不超过 2000 的数 小于 的质数很少,我们考虑将一个数按其所含的大质数分类。
定义“大质数”为数 中所含的唯一一个不小于 43 的质数(43 也算是因为 ),
特别的,不存在则定义为 1。
分类后在一类中我们仅考虑 41 即以内的共 13 个小质数,考虑状压,dp 出一类中得到 种质因子集合的方案数,复杂度 。
对于一次询问,我们将所有出现的大质数拿出来,在这些类中我们都至少选一个,其他类随便选。
我们考虑这实际上是所有类做或卷积,出现的大质数的集合幂级数需要稍加改动,容易发现有逆。
时间复杂度 。
D2T2 bracket
先建出括号树,考虑操作在树上的表现:
- 将树上相邻的兄弟 进行修改,将 的所有儿子挂到 上,再将 也挂到 上,代价为 。
- 任意交换两个相邻的子树,代价为 。
我们希望求得将树变成一条链的最小代价。
我们考虑从浅到深的将节点往下移动,显然答案不劣。
那么问题变为我们将前若干层操作为链后,当前层形如一个菊花,我们需要决策留下一个节点,并将当前层其他节点下放至所留节点下。
记当前层的权值总和为 ,极值分别为 ,个数为 。
分 的取值讨论:
-
,答案为 。
-
,一次移动需要将往下层走的节点记一次贡献,那么每层留下权值最大的点即可
容易用 multiset 维护。
-
,一次移动还将对其选择的父亲记一次贡献,我们希望贪心的利用当前层的最小值作为父亲。
考虑当我们选择留下的点不是最小值时,我们现将其他所有点移到最小值下,再将最小值移到所选点下即可。
当我们选择的点就为最小值时不需要最后的一步移动,但容易算出贡献均为 。
我们直接贪心的留下最大值即可,既使下一层的 最小,又尽可能的保证 不增大。
仍然直接使用 multiset 维护即可。
-
,一次移动仅记父亲一次贡献,我们还是利用当前层的最小值作为父亲。
移动的构造与 Case 3 相同,若留下的节点权值为 ,贡献改成 。
仍然贪心,考虑仅有链的第 个点不需要因 贡献权值,我们希望这个位置为全局最大值;
而由于 是固定的,我们希望每层的 都尽量小。
那么我们尽量让每层的 都传下去——这在 的层容易实现。
我们考虑 层每一层决策时的个数 ,
其应当呈现一段 1,一段 2,一段 >2,直到原树中该层不存在节点,剩一段每次下降 1 的序列。
对于第一段 1,我们不需要处理,它们没有贡献。
第一段 2 实际上的贡献为其间所有权值和去掉一个往下传的节点,记其为 。
我们容易计算后面的 的贡献,考虑计算 的贡献。
由于有一个 往下传,其可能对应一个层数区间其为最小值,带来一定的贡献,而其不为最小值的后缀区间我们容易预处理。
那么我们从小到大枚举可能的 ,进行双指针即可,时间复杂度为排序的 。
总复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】