Solution Set - “也许我们早已经共鸣在那约定之地”
- 0.「AGC 024D」Isomorphism Freak
- 1.「APIO 2018」「洛谷 P4631」选圆圈 ⭐
- 2.「UR #2」「UOJ #31」猪猪侠再战括号序列
- 3.「UR #3」「UOJ #48」核聚变反应强度
- 4.「HAOI 2018」「洛谷 P4493」字串覆盖
- 5.「CF 1817A」Almost Increasing Subsequence
- 6.「CF 1817B」Fish Graph
- 7.「CF 1817C」Similar Polynomials
- 8.「CF 1817D」Toy Machine
- 9.「LR #9」「LOJ #560」Menci 的序列
- 10.「UR #3」「UOJ #49」铀仓库
- 11.「UR #3」「UOJ #50」链式反应
- 12.「JSOI 2018」「洛谷 P4518」绝地反击
- 13.「BZOJ #2567」篱笆 ⭐
- 14.「洛谷 P9308」#1f1e33
- 15.「UR #4」「UOJ #51」元旦三侠的游戏
0.「AGC 024D」Isomorphism Freak
- Link & Submission.
设直径为 , 则最小同构系大小显然是 , 我们只需要求出满足这个大小的最少叶子数. 我们确定一个点或者一条边为中心, 向外 BFS, 同层结点的度数需要最终相同, 因此此时最少叶子树就是每层度数最大值的乘积. 这个中心点不一定和直径有关, 但… 实在是太小了, 全部枚举一边就行, 可过.
1.「APIO 2018」「洛谷 P4631」选圆圈 ⭐
- Link & Submission.
- 「A.计算几何」「B.Tricks」
好像在 127 的论文里见过这个网格化的 trick?
设当前最大半径为 , 为任意满足 的阈值. 那么, 我们在坐标系上按 为边长划分网格后, 两个圆相交的必要条件就是它们圆心所在的网格八联通. 若将 保持在 的范围, 我们就能以 次重构的代价限定出一个良好的检查范围. 正好, 大圆间会相互消除, 所以无效检查次数并不多. 用 std::map
之类的暴力维护网格信息, 可以做到 .
2.「UR #2」「UOJ #31」猪猪侠再战括号序列
- Link & Submission.
构造 (((...)))
, 最坏 次交换.
3.「UR #3」「UOJ #48」核聚变反应强度
- Link & Submission.
一定是 除上 的某个素因子, 直接枚举就行. 复杂度 .
4.「HAOI 2018」「洛谷 P4493」字串覆盖
- Link & Submission.
挺 dirty 的题. 模式串长的在 fail 树的主席树上二分, 模式串短的按长度随便怎么预处理一下就行, 带一堆 或根号应该都能过.
5.「CF 1817A」Almost Increasing Subsequence
- Link & Submission.
呜… 大晚上脑子还是转得不快.
考虑最优子序列的选取, 我们可以把原序列划分为若干个下降段: . 显然全局最优选择是 . 前后两项特判, 中间的 维护出下标, 区间查询时二分一下能取到的段即可. .
6.「CF 1817B」Fish Graph
- Link & Submission.
读题读成选导出子图, 纠结那个 "exactly extra edges" 纠结了一年.
选导出子图就是蠢蠢题了, 枚举关键点, 从其邻接点出发 DFS, 到第一次遇到另一个邻接点时取出该环, 再加上其他两条边就行. .
7.「CF 1817C」Similar Polynomials
- Link & Submission.
- 「A.构造」
赋值的欲望在燃烧.
一个简洁做法. 设 , 同理. 那么:
用 Lagrange 插值的式子求出 即可. 题目保证 存在, 可见我们的算法已经给出了唯一可能的答案. .
8.「CF 1817D」Toy Machine
- Link & Submission.
- 「A.构造」
Wrong answer on pretest 1 🤡
OI 无关手玩题. 注意到 LDRU
可以让左侧的块安全地 (不会被流放到右边去) 转圈, 我们不断重复这个操作, 就能把第 个块移到最左边.
复杂那么一点点. 我大概也是乱胡胡出来了, 所以没办法编 motivation. 这里直接给出构造.
-
Step 0. 考虑如下局面:
我们现在希望把
i
移到左上角. -
Step 1. 类似上一个部分, 重复
RDLU
直到i
右侧无方块: -
Step 2. 重复
LDLU
把所有方块聚集到左侧, 同时i
右侧仍然无方块: -
Step 3.
RDL
, 游戏结束.
每种操作的次数都可以根据最初的 直接算出来. 操作次数是 的.
9.「LR #9」「LOJ #560」Menci 的序列
- Link & Submission.
- 「B.贪心」「C.性质/结论」
最 key 的地方在于看一眼特殊性质: "不存在两个相邻的 +
". 先想想这该怎么做?
每次要不 要不 , 我们一定不会让最高 bit 移出上限, 但我们又必须最大化最高 bit. 另外一方面, 连选显然没必要. 因此, 当且仅当答案数字最低 bit 为 , 当前是一个 , 且后面的 数量已经足够我们顶到上限时, 我们才会放弃这个 , 期待后面有个 让数变大. 贪心扫一遍即可.
回到原问题. 拓展刚才的做法, 我们用 *
把序列分为若干段. 先将每一段中的 +
尽量进位, 得到一个和刚才同质的情况, 一样地贪心. 不过当一个段仅剩两个 +
时, 放弃进位而保持当前位置有 bit 就更优了. 还是 扫一遍就行.
10.「UR #3」「UOJ #49」铀仓库
- Link & Submission.
二分答案, 枚举起点, 双指针最左最右碰到的箱子检查答案即可. , 实现起来其实不太舒服. (
11.「UR #3」「UOJ #50」链式反应
- Link & Submission.
- 「A.数学-生成函数」「A.数学-多项式」
裂变过程是一个二叉树上挂叶子的结构, 很容易想到用 GF 刻画树上的组合情景. 令 , 表示答案关于初始原子个数的 EGF, 那么
注意第一个原子一定是根, 所以全局排列数是 , 左侧需要求导对齐指标.
这个形式的 ODE 是 Riccati 方程的特例, 根据一些结论, 初等函数解是存在的, Wolfram 给出的结果是:
(其实也能算, 能算的!)
当然, 常规做法就直接分治 FFT 解就行. 复杂度 .
12.「JSOI 2018」「洛谷 P4518」绝地反击
- Link & Submission.
- 「A.分治-二分答案」「A.扫描线」
二分答案嘛, 余弦定理 (差点忘了 ?!) 求出每个出发圆交目标圆周的弧度区间, 显然我们可以钦定多边形存在一个落在区间边界的顶点, 枚举这个顶点就能生成多边形, 继而得到每个出发点能走到的顶点区间. 这样, 问题就转化成环上区间覆盖, 判断是否存在完美匹配. 在 Hall 定理的判据下最容易挂掉的显然是顶点区间, 扫描线维护判断即可. .
13.「BZOJ #2567」篱笆 ⭐
- Private link & Submission.
- 「A.分治-二分答案」「A.数据结构-线段树」「B.Tricks」
感觉这个思路的题没咋做过捏? 本题核心大概是从贪心过程的 DP 中生成不等关系, 同时对 "" 形式的关系进行枚举放缩.
仅讨论全局答案. 设 表示从左到右第 个栅栏最终的中心点位置, 显然栅栏的中心点的相对位置不会改变. 我们容易得到 的递推:
我们需要满足所有的 . 拆开 :
因此
对于链的情况, 我们还要求:
对于环的情况, 只需要倍长区间满足第一个判据即可. 这些判据涉及的区间信息都能用线段树维护. .
14.「洛谷 P9308」#1f1e33
- Link & Submission.
- 「A.数学-数论」
上面是草稿. 解释一下:
中 即 化简的结果.
中 转而枚举 中的 ; 实际上应当有 , 但是 已经处理掉这一条件带来的非法贡献了; .
中,
注意其求和下指标, 这里已经去除了 的贡献.
中, 通过莫反引入了 的枚举. 枚举钦定的 , 枚举是 的公因子但没被 枚举的部分, 即二者乘积.
最后的式子中, 乘积式的最后一项求和可以写作 和 的形式. 到此, 预处理所有需要的中间函数, 可以 求解.
15.「UR #4」「UOJ #51」元旦三侠的游戏
- Link & Submission.
和 Candy Piles 没有区别. 注意即使是 powl
精度也会被打爆.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现