0%

Codeforces Educational Round 123

A

题目大意

给定包含 $\texttt{RGBrgb}$ 各一次的字符串,判断 $\texttt{r,g,b}$ 是否分别在 $\texttt{R,G,B}$ 之前。

题解

模拟即可。

B

题目大意

构造出 $n$ 个长度为 $n$ 的排列 $p$,使得不存在 $p_i=p_{i-1}+p_{i-2}$。

$1\le n\le 50$。

题解

做法很多,发现极大多数的排列均满足这一性质,可以直接随机或者爆搜解决。

C

题目大意

给定长度为 $n$ 的数组 $a$ 及整数 $x$,$\forall k\in[0,n]$,求
$$
\max_{1\le l\le r\le n}\left\{x\min\{k,(r-l+1)\}+\sum_{i=l}^ra_i\right\}
$$

$1\le n\le 5\times 10^3$。

题解

发现这个式子只与区间和和区间长度有关,考虑设 $f(i)$ 表示长度为 $i$ 的区间中区间和的最大值,答案即为
$$
\max_{1\le i\le n}\{f(i)+x\min\{k,(r-l+1)\}\}
$$

时间复杂度 $\mathcal{O}(n^2)$。

D

题目大意

有一个 $n$ 行 $m$ 列的网格及 $k$ 种颜色,有 $k$ 次涂色操作,每次操作都在 $(x,y)$ 所在行和所在列的所有元素涂上 $k$ 种颜色的一种, 求会产生多少种涂色方案。

题解

自然地想到倒序处理。

倒序处理后就不会出现覆盖的情况,可以记录下哪些行哪些列被标记,就可以判断当前点是否能产生贡献。

由于一次操作如果能产生贡献,则必然产生 $k$ 的贡献,故答案为 $k^{\text{cnt}}$,其中 $\text{cnt}$ 表示产生贡献的点的数量。

E

有一个 $n$ 行 $n$ 列的网格,及一个字符串 $S$,可以任意次对字符串中的元素进行复制,小 A 将从 $(1,1)$ 开始,依次执行串中的操作。操作存在两种,向右或向下行走。

问小 A 一共能达到点的个数。

题解

做法一堆 (甚至有线段树我不知道怎么想的)

先将相同的操作合并,考虑线性递推,记录每次操作的最靠近左上方的坐标和当前操作重复了多少次,由于不允许出到边界,考虑记下操作的后缀和,可以处理出当前操作可以到达的最大坐标,与当前坐标相减后乘上上一次的值即可计算当前的贡献。注意要减去重复的贡献即可。

F

题目大意

定义 $F(a,k)$ 表示将数组 $a$ 的每个元素复制 $k$ 遍取前 $|a|$ 个得到的结果,$G(a,x,y)$ 表示将数组 $a$ 中所有为 $x$ 的元素变为 $y$,$y$ 变为 $x$ 所得到的数组。

定义 $a$ 是 $b$ 的祖先当且仅当存在一系列 $x$ 或 $x,y$ 使得不断对 $a$ 进行操作能得到 $b$。

给定 $n$,$k$,求最小的数列数量,满足对于所有的长度为 $n$、值域为 $[1,k]$ 的序列,存在一个序列使得成为祖先。

$1\le n,k\le 2\times 10^5$。

题解

考虑没有 $F$ 的限制怎么做。

由于 $G$ 是一个双射,我们可以考虑枚举有 $i$ 个数相同,则相当于将序列分成了 $i$ 个子集,即方案数为
$$
\sum_{i=1}^{\min\{n,k\}}\begin{Bmatrix}n\\i\end{Bmatrix}
$$
这里 $n$ 比较大,无法 $\mathcal{O}(n^2)$ 求得第二类斯特林数,考虑斯特林数恒等式
$$
m!\begin{Bmatrix}n\\m\end{Bmatrix}=\sum_{i=0}^{m}(-1)^{m}\binom{m}{i}(m-i)^n
$$

整理可得到卷积的形式,即
$$
\begin{Bmatrix}n\\m\end{Bmatrix}=\sum_{i=0}^m\frac{(-1)^i}{i!}\times \frac{(m-i)^n}{(m-i)!}
$$

至此可以用 FFT 在 $\mathcal{O}(n\log n)$ 的时间内求得答案。

考虑加上 $F$ 的限制。

显然易见的是,$F(a,k)$ 的结果由 $\left\lfloor\dfrac nk\right\rfloor$ 个连续的长度为 $k$ 的子段及末尾不完整的子段构成(这些子段中的数均相等)。由于会有两个相同的子段,则如果除最后一段外,其长度的 $\gcd$ 不为 $1$,才可以由 $F$ 所表示出来。故答案即为
$$
\sum_{i=1}^n\mu(i)\sum_{j=1}^{\min{\left\lceil\frac{n}{i}\right\rceil,k}}\begin{Bmatrix}\left\lceil\frac{n}{i}\right\rceil\\j\end{Bmatrix}
$$

时间复杂度 $\mathcal O(n\log n)$,常数较大。