随机乱做计划 Part 2

对 Umnik 想题法的两个尝试。

随机挑选四个题,什么时候想出来了再更新。

由于博主水平有限,所以不会做是正常情况。

  1. CF1491G *2800
  2. CF1392G *2900
  3. CF1266F *2900
  4. CF1610H *3100

题意:


CF1491G

桌面上有 n 枚硬币。初始时,第 ci 号硬币位于位置 i,正面朝上(c1,c2,,cn 是一个 1n 的排列)。你可以对这些硬币做一些操作。每次操作,你可以如下进行:

  • 选择两个不同的 ij
  • 交换位于 ij 的两枚硬币。
  • 把位于 ij 的两枚硬币分别翻转。

你可以进行不超过 n+1 次操作,使得第 i 号硬币位于位置 i,且都是正面朝上。

不需要最小化操作的次数,输出任意一种方案即可。

3n2×105

想法

考虑若干个环。

容易发现长度为 n 的环可以在 n+1 次操作做完。

长度为 x,y 的两个环可以在 x+y 次操作同时做完。

submission


CF1392G

给定两个长度为 k01S,T,分别是起始串和目标串。

依次给出 n 个可选操作,第 j 个操作 aj,bj 表示交换起始串的 aj 位置与 bj 位置。

你需要选择操作序列中其中连续的一段操作依次按顺序执行,并且选择的操作数量不小于 m

你需要让操作完成后的串与目标串对应相同的位置数量尽可能多。

输出最大数量与你选取操作的区间(若有多种方案输出任意一个即可)。

2k20,1mn106

想法

尝试差分。

ai 表示 S 操作 [i,n] 的结果,bi 表示 T 操作 [i,n] 的结果。

相当于找到 x,y 满足 yxmmaxpop_count(ax xor by)

注意到 k 较小,子集 dp 即可。

submission


CF1266F

给出一颗 n 个点的树 (2n5×105)。

对于 k[1,n],找出一个最大的点集,使得点集内任意两点间距离为 kk+1

想法

显然对 k1,一定是三种情况:

  1. 2k,选一个点作为根,每个子树选一个距离为 k2+1 的点,至多选一个距离为 k2 的点。
  2. 2k,选一个点作为根,每个子树选一个距离为 k2 的点。
  3. 2k,选一个边,连接两个点的每个子树选一个距离为 k2 的点。

困难在于:如果枚举每个点,并计算每个 k 的贡献,时间复杂度难以承受。

注意到每个点可能的最大答案不超过其度数,我们考虑枚举每个点,并计算每条出边的贡献。

这样就能解决 case1,2

对于 case3,我们实际需要解决的问题是:

O(m) 次单点加,n 次查询树上选出一条边,端点之和的最大值。

把一个点的贡献算到父亲上就好了。

submission


CF1610H

猫猫们看了鱿鱼游戏,对其很感兴趣,决定自己举办一个猫猫游戏。

m 只猫猫参与了游戏,游戏失败的猫猫要被拉出去和铃酱贴贴。

蓝是游戏的裁判,由于所有猫猫都想和铃酱贴贴,于是她要淘汰所有的猫猫。下面是她淘汰猫猫的方式:

  • 有一棵 n 个结点的无根树,每只猫猫都有两个特殊结点 xiyi
  • 在一次操作中,蓝可以选择某个结点 v。接下来,对于所有未被淘汰的猫猫 i,蓝将找到一个结点 w,满足其在 xiyi 的简单路径上且距离 v 最近,若 wxiwyi,那么猫猫 i 将会被淘汰。

现在蓝想要知道她至少要进行多少次操作才能淘汰所有的猫猫。如果无论如何都不能淘汰所有的猫猫,请输出 1

输入数据的第一行含两个数 nm,意义同上所述。第二行含 n1 个数 par2,par3,,parn,其中 pari 代表无根树上存在一条连接 ipari 的边。接下来 m 行,第 i 行含两个数 xiyi,意义同上所述。

本题数据满足:1n,m3×1051pari<i1xi,yin,xiyi


不想写做法了,这题有点怪。

submission

posted @   一般通过小萌新  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示