CF AT 选讲

讲题

Posted by WrongAnswer_90's Blog on January 3, 2025

CF2053G Naive String Splits

感觉很牛的。

首先假设 $ X < Y $。想要拼出来 $S$,先贪心的拼 $X$,不行了就进行一个反悔。

设 $Y=X^k+Z$,则可以删去最后 $k$ 个 $X$。如果能删去 $>k$ 个,则一定能删去 $k+1$ 个。画一下:

image.png

可以发现 $XZ=ZX$。这可以说明 $X$ 和 $Z$ 都存在长度为 $\gcd( X , Z )$ 的公共循环节,$Y$ 也存在。那只需要简单判断一下即可。

否则只能 replace 最后的 $k$ 个,这样贪心不断填 $X$,不能填了就尝试填一个 $Y$。复杂度是调和级数。

CF2053H Delicate Anti-monotonous Operations

差不多得了。

CF2053I1 Affectionate Arrays (Easy Version)

首先答案下界是 $sum$。可以构造达到。

因为总和确定,所以需要保证的是就是每时每刻的前缀和都需要在 $[0,sum]$ 之间。在要出去的时候就需要把它拉回来。可以暴力 DP,$f_{i,j}$ 表示前 $i$ 个数,前缀和是 $j$ 最少用多少次操作。

同一层的 $f$ 相差最多是 $1$,并且是一个区间,所以可以直接贪心:维护当前合法前缀和区间 $[L,R]$,遇到 $a_i$ 就变成 $[L+a_i,R+a_i]$。如果 $R+a_i<0$ 或 $L+a_i>sum$,那就先用一次操作把 $[L,R]$ 变成 $[0,sum]$ 再加 $a_i$。最后还要判一下如果 $R$ 不是 $sum$ 还要多一次操作。

CF2053I2 Affectionate Arrays (Easy Version)

维护上面过程的段。每个段内方案数一定一样。