Solution Set - “潮汐守候终结放逐月圆”
- 0.「NOI Simu.」游戏 ⭐
- 1.「NOI Simu.」海盗 ⭐
- 2.「集训队作业 2020-2021」「LOJ #3405」Gem Island 2 ⭐
- 3.「UR #12」「UOJ #181」密码锁 ⭐
- 4.「UR #25」「UOJ #805」设计草图
- 5.「UR #25」「UOJ #806」见贤思齐 ⭐
- 6.「NOI Simu.」哈密顿路
- 7.「NOI Simu.」统一省选
- 8.「NOI Simu.」并行计算 ✡️
- 9.「NOI Simu.」游戏 ⭐
- 10.「NOI Simu.」模拟赛
- 11.「NOI Simu.」MOMO ✡️
- 12.「HDU #6636」Milky Candy
- 13.「Gym 102156D」Pick Your Own Nim
- 14.「UR #11」「UOJ #168」元旦老人与丛林 ⭐
- 15.「洛谷 P9347」似曾相识燕归来
这篇 sol set 很长哟~
0.「NOI Simu.」游戏 ⭐
- Private link | 你放 MTT 兔就君子动口不动手了.
- 「A.数学-多项式」「B.复杂度平衡」
非法条件是不存在长度至少为 的同色段, 显然计数这个非法序列数量更方便. 初等地, 设 表示长度为 的非法序列数量, 我们有
一方面, 对于 , 我们可以 地大力 Bostan-Mori 算远项. 另一方面, 引入 GF, 可以发现
考虑系数提取. 设 , 那么
组合数可以 Lucas 求, 那么这样可以得到一个 的算法. 上下平衡一下复杂度就能得到正解. 当然, 似乎可以强行暴力卷积, 将更大的计算量放到第二种算法上.
1.「NOI Simu.」海盗 ⭐
- Private link & Submission.
- 「A.DP-凸函数维护」「B.Tricks」
不难发现, 我们可以通过描述 和 之间传递的金币数量 来描述一种方案. 先假设 , 设 表示 内的所有海盗已经合法, 向 传递的金币数量为 时的最小代价, 那么
从维护函数 的角度思考, 从 , 我们进行了如下变换:
- 取 .
- 将 整体向左平移 个单位.
- 令 .
注意 的凸性, 这提示我们可以用 slope trick 维护这个函数. 具体来说, 用两个堆负斜率突变点和正斜率突变点. 前两个操作都比较简单, 第三个操作, 设函数斜率从 突变向 的位置是 , 从 突变向 的位置是 , 讨论:
- 若 , 两个堆各自加入一个 .
- 若 , 此时 将进入正斜率突变的范围, 将 取出加入另一个堆, 然后在负斜率堆中加入两个 .
- 若 , 类似.
这样单次可以做到 .
如何破环? 自然的想法是枚举 . 可以证明答案关于 的函数 仍然是凸函数, 这样就能 求解了.
证明
首先, 不妨把 的定义域扩大到 . 利用整数费用流的最优解可以是整数的性质, 这并不会影响答案.设 和 是让各自的 取到最小值的一种方案, 我们只需要说明 是一组合法方案, 且 的代价不超过 即可. 这里简单计算一下即可证明, 接下来思路比较明确, 就略过了.
2.「集训队作业 2020-2021」「LOJ #3405」Gem Island 2 ⭐
- Link & Submission.
- 「A.数学-组合计数」「A.数学-数学推导」
(, , 你这变量名太怪了.)
前 大? 钦定排名什么的不太好做, 我们可以尝试在值域上求解. 例如, 在一个固定的方案中, 设 表示值 的个数, 那么该方案的贡献是 .
设 表示钦定了 个位置的值 的方案数, 显然:
对应地设 表示恰好 个位置的值 的方案数, 反演出:
继而, 我们可以表示出答案:
这个式子带着 算就很没前途, 接下来我们还是得拆开 化简.
(你这啥也没化简啊?) 是可算的, 我们重点优化最后一个求和. 直接来嘛:
(呜… 重名了, 上式的所有 与全局的 无关.) 到此, 我们欲求
最后一个和式可以高维前缀和, 这样我们得到了 ( 同阶) 的算法.
3.「UR #12」「UOJ #181」密码锁 ⭐
- Link & Submission.
- 「A.DP-状压/插头 DP」
竞赛图的缩点后一定是满足每个点都向后面所有点连边的链, 这都不知道的吗…
因此, 我们只需要计数非空割集的数量. 若不考虑特殊的边, 割 出现的概率是 , 因为特殊边很少, 我们尝试在此基础上更正特殊边的概率贡献. 可见, 若一条特殊边取 方向的概率是 , 则它应该带来更正因子 . 而特殊边的情况只与 和该特殊边参与形成的连通块 的交集 有关. 我们只需要对每个 的子集 , 求出 的更正因子, 背包合并出 的所有情况下更正因子乘积之和, 再用无特殊边的方法计算答案即可. 复杂度 .
4.「UR #25」「UOJ #805」设计草图
- Link & Submission.
不难发现, 某个子串 合法, 当且仅当:
- .
- 将所有 替换为 后, 子串所有前缀均满足 个数不少于 个数.
- 将所有 替换为 后, 子串所有后缀均满足 个数不少于 个数,
后两个限制相对独立, 我们考虑求出 和 , 分别表示从 开始, 满足两个条件的最远端点, 这个可以栈模拟一下括号匹配求. 此后就 BIT 贡献答案即可. .
5.「UR #25」「UOJ #806」见贤思齐 ⭐
- Link & Submission.
- 「A.数据结构-可持久化线段树」「B.倍增」
先胡一下赛上胡的东西. 考虑 subtask 3, 我们尝试对每个元素 维护其变化序列 , 使得 . 可以发现, . 有了这个边界, 我们只需要考虑 向 的更新过程.
在漫漫时间长河中, 一定存在一个时刻 , 有 , 此后两个数的变化都是 "若 在当前时刻 , 则 在下一时刻 ", 也就是说, 大体上, 是 向右平移一个位置的结果. 在这个 时刻之前的部分就是简单的全部 或者全部不变, 也不难维护. 我们用一个持久化线段树维护所有序列即可. 在 时, 需要实现一个线段树二分来找 .
全局情况, 我们需要处理的是内向基环树. 显然环上最小值也是 , 从这个位置出发就能推出其他所有点的 了, 复杂度是同样的 .
不想写? 看看 zak 的做法吧家人们!
考虑最基本的递推形式, , 虽然正确性不言而喻, 但这样的递推可以规避掉一些分枝判断, 更便于优化. 如果我们对递推式中的 进行迭代, 我们就会得到一系列 的区间来约束 的上下界. 我们直接倍增求出区间嵌套关系第一次被破坏的位置, 就能求出答案了. 复杂度还是 .
6.「NOI Simu.」哈密顿路
比较脑筋急转弯的题. 注意图是无向图, 因而哈密顿路可以通过从某个特定点出发的两条点不交路径生成. 不妨取一个特殊点 , 求出 表示从 出发经过集合 内的点时, 可以以哪些点作为终点, 直接枚举下一步就能转移. 最后用所有 和 贡献答案即可. 复杂度 .
7.「NOI Simu.」统一省选
- Private link & Submission.
- 「A.数据结构-线段树」
注意到所有的单个关卡都可以表示成进入血量 和离开血量 的函数 , 满足
而这种分段函数相互复合, 得到的函数仍然具有同样的形式. 讨论复合结果时, 可以讨论内层的 与外层的 的位置关系, 情况并不多. 线段树维护所有区间的函数即可, .
8.「NOI Simu.」并行计算 ✡️
- Private link & Submission.
- 「A.构造」「C.性质/结论」
这题很麻烦的点在于需要构造步数严格最小的方案, 我们必须得找到一个紧的下界, 才有构造的目标.
比较简单的一个界是 , 毕竟我们总得构造一个长度为 的序列出来.
接下来, 我们通过描述 "合法且优秀的操作" 的性质, 得到另一个下界.
首先, 可以发现, 我们任何时候得到的序列都应该有着连续的值, 即恰好包含某个区间 内的所有整数. 此外, 我们也没有必要将同一个序列多次造出. 据此, 我们可以建出一张图, 图中结点代表某个 , 若 不是叶子, 则其应当有两条入边 , 表示我们通过 得到 . 这样, 我们得到了一个 DAG.
接下来又是 key 但不知道 motivation 的东西: 我们考虑所有可达 的结点, 它们的诱导子图构成一棵内向树 , 显然共有 个叶子, 个非叶结点, 每个非叶结点都恰好有两个儿子, 各结点的区间或离或含. 设 为树中 的数量, 注意到我们在得到 时, 必然需要先得到某个 和 , 据此可知我们一次只能合成一个 (否则, 原材料中必然有相交而不相含的区间). 设操作次数为 , 我们得到 .
然后考虑树外, 树外还有 个 , 我们至少也需要 个单元操作来生成它们. 设 为单元操作数量, 结合树内树外, 我们得到 , 则 , 同时显然有 , 因此 .
到此, 我们得到了一个 的界.
爆搜出 的最优解, 对于 的部分, 用 的解不断压缩, 可以得到 的解, 大力调整最后的 corner 即可. 对于给出的数据, 大多再添加一个不少于剩下数个数的最优构造就能达到下界. 一个不平凡的情况是, 若剩下 个, 需要用 的最优解 (恰好可以是两个 的最优解拼起来) 而不能再用 压缩. 给出的构造顺便就完成了下界证明.
9.「NOI Simu.」游戏 ⭐
- Private link & Submission
- 「A.数学-组合计数」
第一问没手也行: 独立地考虑每个位置被选入方案的概率. 假设我们在所有合法方案中随机挑一个出来, 记事件 表示 存在在这个方案中的概率, 那么
很显然, 左下方的矩形中必然存在一个在方案中, 第一次在这个矩形中选位置就选到 的概率即 . 最终答案即 , 其中 即调和级数第 项. 复杂度 .
第二问就有点哇塞了. 经过一些尝试, 我们发现我们几乎只会描述 , 甚至连总方案数都不是很好求, 更不要说 DP 求答案了. 如何用这个概率描述答案? 设 是方案集合, , 可以想到
好消息是, 我们的确用单纯的概率描述了答案. 坏消息是, 这个概率咱还是不会求啊?
尝试引入一个构造性转化 (实际上兔是硬想的, 但加上这个转化的确会清晰很多). 我们考虑全体 阶排列, 将它们填入网格图, 对于某个排列 , 我们按照值升序枚举排列的元素, 若这个元素所处的位置没有被删除, 则将其加入方案序列, 这样就能得到 所对应的方案 . 我们惊讶地发现, 可重集 正是 正比于元素概率展开得到的古典概型的样本空间!
若 和 的左下矩形存在包含关系, 不妨设 , 注意到这里有 , 因而此时
否则, 两点位置关系形如
我们要求 和 都在方案中, 这里就可以通过约束 和 来达成这一点. 不妨设 , 明显, 是阴影中所有数的最小值, 概率为 , 是 矩形中的最小值, 放在排列上可以明显看出 的约束不影响 , 因此这里概率就是 . 最终, 我们得到
By-definition 的算法是 的, 需要稍稍优化最后一个式子. 我们枚举 时的 , 预处理自然数倒数等间距求和的结果, 再枚举对应的 和 贡献答案. 同理还需要枚举 时的 . 复杂度 .
10.「NOI Simu.」模拟赛
- Private link & Submission.
- 「A.数学-FWT」
水题放 T1 好不好? 水题放 T1 好不好? 水题放 T1 好不好? 水题放 T1 好不好? 水题放 T1 好不好?
可以鉴定出, 我们需要手算答案序列 的 or-卷积正变换结果 , 直接展开有
鉴于 极小, 尝试讨论 对答案的贡献. 尝试构造容斥系数 使得
其中 . 这样前面的乘积就可以高维前缀积 (好怪的仿词) 求出来. 当然, 这里的构造也没什么难度:
除法通过 形式即可在算数域内完成, 这样就 done 了. 暴力做是 的, 当然这个 也可以高维前缀商 (???) 求出来, 可以把前半部分优化到 .
11.「NOI Simu.」MOMO ✡️
- Private link & Submission.
- 「A.构造」
希望出题人不要在题解中写谜语.jpg
因为几乎是完全依赖题解做的, 所以讲解会很 unmotivated, 抱歉啦. 为方便阅读, 下划线字符记作
先考虑如何对树构造. 下用 表示从 到 的树上路径的点集 (注意, 含 但不含 ), 表示 的父亲. 不妨以 为树根, 字符串内字符编号为 . 我们通过 来构造答案. 令 , , 紧接着修改 . 可见, 对于任意 , 和 不一样的位置就是 中所有结点编号对应的字符.
推广到一般图上, 我们取出图的 BFS 树, 先在 BFS 树上进行上述算法得到一个初始答案. 不过两点 间的 BFS 树上距离可能大于原图上距离, 我们记这两个距离的差值为 . 接下来通过引入 来调整答案. 对于 的 , 我们期望在 字符不同的位置引入总共 个不重合的 , 如果所有点对都成功地引入了恰当数量的 , 我们的构造就合法了.
我们先来研究 的性质. 以下结论都是不言而喻的:
-
若 是 的树上祖先, 则 .
-
设 , 若 , 则 .
由性质 1, 我们不应该去动 中 的祖先们对应的字符, 那就只好调整 中的点对应的字符了. 而又由性质 2, 最坏情况下, 上只有 个点, 这怎么办? 一个很好的 motivation 便是: 将从 数到 这 个自然数按奇偶性分开, 在 上尝试找到所有 的突变位置 (从 变化到 的最高的点), 在 中修改它们的字符; 同理, 在 上尝试找到所有 的突变位置 (从 变化到 的最高的点), 在 中修改它们的字符. 这样, 所有的突变位置一定都能够被找到, 的构造就完成了!
最后一个点, 我们当然希望对所有 都来这样构造, 但如何保证这些构造不会破坏彼此的合法性? 考虑所有影响到 的构造, 我们枚举一个 的祖先 , 然后再枚举 在外侧子树根 , 处理 在 子树内的字符. 可见, 只要 子树内的点关于 的构造全部都选择了 "奇数构造" 或者全部都选择了 "偶数构造", 就不会产生矛盾. "一棵子树选择相同"? DFN 嘛! 我们按照 和子树根 的 DFN 大小关系选择奇偶构造就行了.
复杂度 , 构造部分非常宽松, 怎么写都可以.
12.「HDU #6636」Milky Candy
- Link & Submission (因为离开高版本语法就不会写代码, 所以就在校内 OJ 交了).
- 「A.拟阵/拟阵交」
带权拟阵交捏! 秉承多得少不得的原则, 我们得把选择取个补集才能描述限制.
令 , 其中 即全体提示集合, 当且仅当用 中的提示能解出方程组. 遗传性显然, 交换性可以放到图上证明. 对于 且 , 我们一定能取出 在图上的环, 使得其中的提示没有都出现在 中 (否则 ), 在这个环上未出现在 中的提示中, 任意取一个加入 即可完成交换.
令 , 当且仅当 中从每个 NPC 获得的提示都不小于要求的 , 遗传性, 交换性显然.
拟阵交之. 一个很 sweet 的写法是每次都 判断独立性, 这样虽然是 , 但舒服很多.
13.「Gym 102156D」Pick Your Own Nim
- Link & Submission.
- 「A.拟阵/拟阵交」(怎么会布置这玩意儿的专题呢?) (我草? 去年今日, 我写了拟阵交的学习笔记???)
设 Alice 给出的初始向量集合为 . 令 , 其中 即全体可选向量集合, 当且仅当可重集 是线性无关组. 令 , 当且仅当 Bob 的每个向量集合中最多一个入选 . 两个拟阵的遗传交换不言而喻. 交之.
有个小小的经验, 虽然拟阵交输入的两个拟阵的地位是等价的, 但可能对 的判断难度有所不同. 例如若对其中一个 的判断需要维护不支持删除的数据结构, 我们可以把它放在 , 这样增广的过程中只需要在固定 时枚举 , 判断 , "删除" (更多时候是直接重构) 就不在瓶颈处了.
14.「UR #11」「UOJ #168」元旦老人与丛林 ⭐
- Link & Submission.
- 「A.图论-网络流-最大流/最小割」「C.性质/结论」
嗯? 这是选拟阵题的时候乱入的吗? 还是有什么相关的分析呢?
一道猜猜题. 我们不难发现一个图是丛林的必要条件:
, 其诱导子图 满足 .
可以证明, 这就是图是丛林的充要条件. 由于证明是重点, 这里就不放 <details>
框框了. 我们对 的大小归纳证明. 假设 时的所有图满足条件. 下考虑 的情况, 研究任意一个满足必要条件的图 .
取 中度数最小的结点 . 若 , 则 , 不合假设. 因此必然有 . 设 是 删去 及其连边后得到的图, 讨论 :
对于 , 直接取出 中构造丛林的方案 (由归纳假设, 必然存在), 这显然也是 的构造方案; 对于 , 将 的连边放入 方案中的任意一个边集, 就能得到 的构造方案. 这是两种很简单的情况. 对于 , 设有 . 我们取出 的构造方案, 将方案中的 和 放入不同的集合, 也就得到了 的构造方案.
下讨论 的情况.
我们定义点集 在某个图中的诱导子图 是满子图, 当且仅当 . 有引理:
若 的在一满足必要条件的图中的诱导子图均为满子图且 , 则 的诱导子图也是满子图.
设 , 对应诱导子图 , , 对应诱导子图 . 我们需要说明 是满子图. 因为 , 所以 , 又因为 且 , 所以 . 又因为 , 所以 . 最终有 , 引理得证.
回到证明过程. 设有 , 可以发现, 必然存在 , 使得 中不存在包含 的满子图. 如果不存在这样的 , 则必然存在分别同时包含 的满子图, 根据引理, 它们并起来可以得到满子图 . 此时令 , , 就不满足必要条件了.
现在, 我们可以取出这样的 . 令 , 由于 的性质, 此时 仍然满足条件, 取出它的构造方案. 最后, 将方案中的 替换为 ; 将 剩下的一条边加入另外一个集合, 就得到了 的方案.
综上, 我们只需要检查 是否存在 的子图, 依次钦定 中每个结点入选子图, 跑最大权闭合子图即可. 采取退流操作即可降低复杂度. 最终复杂度 (前半部分是第一次在二分图上跑网络流的复杂度).
15.「洛谷 P9347」似曾相识燕归来
- Link & Submission.
- 「A.构造」「C.细节」
某兔终于想起自己越来越长的 to-do list, 于是随机点了其中一道题. 妈的的确是依托答辩, 怪不得当时没做.
注意到 时, 操作 等价于交换 , 因而我们构造的主要目标就是尽快令 . 未避免一些 corner, 这里只讨论 的情况.
- 若 , 已经结束了.
- 否则设 . 若能找到一个 使得 , 操作 , 结束.
- 否则, 我们尽量向第二种情况靠拢. 若 , 则必然能找到 , 使得 , 操作 即变成第二种情况.
- 现在 . 若 , 尝试找到一个 , 使得 , 操作 , 结束, 且 , 后续操作至多 步.
- 若找不到这样的 , 即 有序, 可以暴力手玩出构造: 操作 . 注意 时会被莫名其妙认为无解.
- 最后一种情况, . 设 , 若 , 操作 , 否则操作 .
. 还是欣赏一下这篇 sol set 里另外两道构造神题吧家人们.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-06-07 Note -「拟阵交」& Solution -「CF 1284G」Seollal
2022-06-07 Solution -「LNOI 2022」「洛谷 P8367」盒