Codeforces Round 998 (Div. 3) 部分题解

写题解的时候这场在评测,就不放代码了。

又是被 div3 薄纱的一天!

E. Graph Composition

题意

给两个无向简单图,对图 \(1\) 添加若干条边或删除若干条边,使得两图的连通性一致,最少需要变更多少条边。

题解

求出图 \(2\) 的连通性,考虑图 \(1\) 的所有边,若违背了图 \(2\) 联通性的要删除(图 \(2\) 不联通但图 \(1\) 联通的)。

接着求图 \(1\) 剩下边的连通性,对于图 \(2\) 的每条边,若违背图 \(1\) 连通性则要加这条边(图 \(1\) 不联通但图 \(2\) 连通)。

用并查集实现。

F. Multiplicative Arrays

题意

给定 \(n,k\) ,对每个 \(1\leq x \leq k\),求出多少个序列 \(a\) 使得:

  • \(|a| \leq n , 1 \leq a_i \leq k\)
  • \(\prod a_i =x\)

\(n \leq 9 \times 10^8\)

题解

\(f_{x,k}\) 表示将 \(x\) 分解成 \(i\) 个有序的大于 \(1\) 的数的乘积的方案数,由于最多只能分解出 \(\log(x)\) 个这样的数,可以直接递推。

计算方案数,需要填充 \(1\) 在剩余位置,枚举 \(a\) 的大小是多少,对于一个拆分个数 \(m\) ,其总方案数为:

\[\binom{m}{m}+\binom{m+1}{m}+...+\binom{n}{m}=\binom{n+1}{m+1} \]

由于 \(m\) 很小最多 \(\log(x)\) 级别,可以暴力求组合数(逆元也是暴力求),复杂度为 \(k\log^3(k)\) ,需要卡卡常。

G. Bugged Sort

参考了官方题解,不会啊咋办 😦

题意

给定两组序列,长度都是 \(n\) ,两组序列的数两两不同,一次操作为选择 \(i \not ={j}\) ,交换 \(a_i,b_j\),交换 \(a_j,b_i\)

能否在若干次操作后使 \(a,b\) 均升序排序。

题解

首先观察到:一次操作后, \(a_i,b_i\) 是绑定的,不会分开,我们称这是一对数。

一次操作实际上是将一对数交换,再分别翻转。能否在不翻转的情况下交换一对数?

答案是可以的,对于 \(i,j\) ,额外选定一个位置 \(k\) ,进行操作 \((i,k),(i,j),(j,k)\) ,就能做到。同理,也能做到不交换两对数只翻转两对数,但不能做到只翻转一对数。

再观察性质,两对数中,若 \(\min(a_i,b_i)<\min(a_j,b_j)\) ,那第 \(i\) 对一定得排在第 \(j\) 对前面,否则一定不能达成目标。由于两组序列上的数两两不同,这个排序方案是唯一的。根据上面的性质,可以在不翻转的情况下将每对数排序。

现在考虑翻转的问题,我们需要确定偶数个位置,将这些位置翻转,达成目标,设 \(f_{i,0/1,0/1}\) 表示满足前 \(i\) 个数,一共翻转了奇数个或偶数个位置,\(i\) 位置有没有翻转,能不能达成,转移是容易的。

posted @ 2025-01-20 21:49  蒻蒻虫  阅读(222)  评论(0)    收藏  举报