随机乱做计划 Part 2

对 Umnik 想题法的两个尝试。

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

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

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

题意:


CF1491G

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

  • 选择两个不同的 \(i\)\(j\)
  • 交换位于 \(i\)\(j\) 的两枚硬币。
  • 把位于 \(i\)\(j\) 的两枚硬币分别翻转。

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

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

\(3 \le n \le 2\times 10^5\)

想法

考虑若干个环。

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

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

submission


CF1392G

给定两个长度为 \(k\)\(01\)\(S,T\),分别是起始串和目标串。

依次给出 \(n\) 个可选操作,第 \(j\) 个操作 \(a_j,b_j\) 表示交换起始串的 \(a_j\) 位置与 \(b_j\) 位置。

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

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

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

\(2\le k \le 20, 1\le m \le n \le 10^6\)

想法

尝试差分。

\(a_i\) 表示 \(S\) 操作 \([i,n]\) 的结果,\(b_i\) 表示 \(T\) 操作 \([i,n]\) 的结果。

相当于找到 \(x,y\) 满足 \(y-x \ge m\)\(\max \text{pop_count}(a_x\ \text{xor}\ b_y)\)

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

submission


CF1266F

给出一颗 \(n\) 个点的树 (\(2\leq n\leq 5\times 10^5\))。

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

想法

显然对 \(k \not=1\),一定是三种情况:

  1. \(2\not\mid k\),选一个点作为根,每个子树选一个距离为 \(\dfrac{k}{2}+1\) 的点,至多选一个距离为 \(\dfrac{k}{2}\) 的点。
  2. \(2\mid k\),选一个点作为根,每个子树选一个距离为 \(\dfrac{k}{2}\) 的点。
  3. \(2\mid k\),选一个边,连接两个点的每个子树选一个距离为 \(\dfrac{k}{2}\) 的点。

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

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

这样就能解决 \(\text{case} 1,2\)

对于 \(\text{case} 3\),我们实际需要解决的问题是:

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

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

submission


CF1610H

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

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

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

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

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

输入数据的第一行含两个数 \(n\)\(m\),意义同上所述。第二行含 \(n-1\) 个数 \(par_2,par_3,\dots,par_n\),其中 \(par_i\) 代表无根树上存在一条连接 \(i\)\(par_i\) 的边。接下来 \(m\) 行,第 \(i\) 行含两个数 \(x_i\)\(y_i\),意义同上所述。

本题数据满足:\(1 \leq n,m \leq 3\times10^5,1 \leq par_i<i,1 \leq x_i,y_i \leq n,x_i\neq y_i\)


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

submission

posted @ 2022-10-21 10:35  一般通过小萌新  阅读(101)  评论(0编辑  收藏  举报