随机乱做计划 Part 2
对 Umnik 想题法的两个尝试。
随机挑选四个题,什么时候想出来了再更新。
由于博主水平有限,所以不会做是正常情况。
题意:
CF1491G
桌面上有 枚硬币。初始时,第 号硬币位于位置 ,正面朝上( 是一个 的排列)。你可以对这些硬币做一些操作。每次操作,你可以如下进行:
- 选择两个不同的 和 。
- 交换位于 和 的两枚硬币。
- 把位于 和 的两枚硬币分别翻转。
你可以进行不超过 次操作,使得第 号硬币位于位置 ,且都是正面朝上。
你不需要最小化操作的次数,输出任意一种方案即可。
想法
考虑若干个环。
容易发现长度为 的环可以在 次操作做完。
长度为 的两个环可以在 次操作同时做完。
CF1392G
给定两个长度为 的 串 ,分别是起始串和目标串。
依次给出 个可选操作,第 个操作 表示交换起始串的 位置与 位置。
你需要选择操作序列中其中连续的一段操作依次按顺序执行,并且选择的操作数量不小于 。
你需要让操作完成后的串与目标串对应相同的位置数量尽可能多。
输出最大数量与你选取操作的区间(若有多种方案输出任意一个即可)。
想法
尝试差分。
令 表示 操作 的结果, 表示 操作 的结果。
相当于找到 满足 令 。
注意到 较小,子集 dp 即可。
CF1266F
给出一颗 个点的树 ()。
对于 ,找出一个最大的点集,使得点集内任意两点间距离为 或 。
想法
显然对 ,一定是三种情况:
- ,选一个点作为根,每个子树选一个距离为 的点,至多选一个距离为 的点。
- ,选一个点作为根,每个子树选一个距离为 的点。
- ,选一个边,连接两个点的每个子树选一个距离为 的点。
困难在于:如果枚举每个点,并计算每个 的贡献,时间复杂度难以承受。
注意到每个点可能的最大答案不超过其度数,我们考虑枚举每个点,并计算每条出边的贡献。
这样就能解决 。
对于 ,我们实际需要解决的问题是:
次单点加, 次查询树上选出一条边,端点之和的最大值。
把一个点的贡献算到父亲上就好了。
CF1610H
猫猫们看了鱿鱼游戏,对其很感兴趣,决定自己举办一个猫猫游戏。
有 只猫猫参与了游戏,游戏失败的猫猫要被拉出去和铃酱贴贴。
蓝是游戏的裁判,由于所有猫猫都想和铃酱贴贴,于是她要淘汰所有的猫猫。下面是她淘汰猫猫的方式:
- 有一棵 个结点的无根树,每只猫猫都有两个特殊结点 与 。
- 在一次操作中,蓝可以选择某个结点 。接下来,对于所有未被淘汰的猫猫 ,蓝将找到一个结点 ,满足其在 到 的简单路径上且距离 最近,若 且 ,那么猫猫 将会被淘汰。
现在蓝想要知道她至少要进行多少次操作才能淘汰所有的猫猫。如果无论如何都不能淘汰所有的猫猫,请输出 。
输入数据的第一行含两个数 与 ,意义同上所述。第二行含 个数 ,其中 代表无根树上存在一条连接 与 的边。接下来 行,第 行含两个数 与 ,意义同上所述。
本题数据满足:
不想写做法了,这题有点怪。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】