做题记录 25.4.12
\(\textcolor{purple}\odot\) CF1922F Replace on Segment
出现次数最少的数字的出现次数一定不超过 \(\lfloor\frac nx\rfloor\),通过 \(\lfloor\frac nx\rfloor+1\) 步就可以全部变为这种值,因此答案上限为 \(\lfloor\frac nx\rfloor+1\)
令 \(eq_{l,o,v}\) 表示经过不超过 \(o\) 次操作令区间内值都变成 \(v\),左端点为 \(l\) 时右端点的最大值,\(ne_{l,o,v}\) 表示区间内值都不等于 \(v\) 的最大右端点
转移有两种,一种为把 \(o\) 次操作拆分为 \(l+r=o\),先用 \(l\) 次操作处理一段,接下来部分尽量用 \(r\) 次操作覆盖;另一种为考虑最后一次操作,可以令区间中数都 \(ne v\),也可以令区间中 \(\ne v\) 的全部变成 \(=v\) 的,操作后需要尝试扩展右端点(区间后面可能接了一段 \(\ne v\) 或 \(=v\) 的,可以把这部分纳入区间)
时间复杂度 \(O(\sum \frac{n^3}x)\)
\(\textcolor{purple}\odot\) CF1919E Counting Prefixes
将 \(p\) 分为 \(>0\),\(=0\),\(<0\) 三段,对于 \(>0\) 和 \(<0\) 的部分分别求出 \(f_{i,0/1}\) 和 \(g_{i,0/1}\),表示所有 \(>0\) 的 \(p\)、\(<0\) 的 \(p\) 填为 \(i\) 个连续段,且其中是否含有包含位置 \(n\) 的连续段,该情况下的方案数
两者计算方式相似,以 \(f\) 为例
令 \(dp_{i,j,0/1}\) 表示填充了 \(\ge i\) 的 \(p\),形成 \(j\) 个连续段,是否含有第 \(n\) 个位置 的方案数,则 \(f_{i,0/1}=dp_{1,i,0/1}\)
考虑如何计算 \(dp\)
令 \(c_i\) 表示 \(>0\) 的 \(p\) 中 \(i\) 的数量,\(mx\) 表示最大的 \(p\)
若 \(mx\le 0\),则 \(dp_{1,0,0}=1\),其余为 \(0\)
否则 \(dp_{mx,c_{mx},0/1}=1\)
\(dp_{i+1,j,0}\) 的转移为
即其中 \(j\) 个 \(i\) 都贴在某个 \(i+1\) 右侧,同时合并若干段,剩下 \(cnt_i-j\) 个 \(i\) 每个贴在一个新连续段的左侧,总计 \(cnt_i-j\) 段,方案数相当于 \(cnt_i\) 个 \(i\) 依次排列,共 \(cnt_i-1\) 个空隙,选择 \(j\) 个插入之前的连续段,共 \(\binom{cnt_i-1}j\) 种选择
\(dp_{i+1,j,1}\) 的转移为
与上一种类似
发现 \(dp\) 中非 \(0\) 的位置只有 \(O(n)\) 个,用 unordered_map 保存有用位置即可把计算 \(f\) 和 \(g\) 的时间复杂度降到 \(O(n)\)
令 \(c_0\) 为 \(0\) 的数量加一(前缀和 \(0\) 位置的一个 \(0\))
枚举 \(\le i\le c_0\) 表示 \(>0\) 的段数量,则答案为
时间复杂度 \(O(\sum n)\),常数极大
\(\textcolor{blue}\odot\) CF1918F Caterpillar on a Tree
先令 \(k\gets k+1\),然后强制要求回到根,显然这样处理答案不变
显然由叶子回到根最优
若 \(k=0\) 则答案 \(=2(n-1)\),然后考虑 \(k\ne 0\) 的情况
令 \(dep_u\) 表示 \(u\) 到根的距离,\(d_u\) 表示 \(u\) 子树内最大的 \(dep\),\(p_u\) 表示 \(d_u\) 对应的点
对于 \(x\),若要在其子树内选择一个叶子回到根,使得其最后被遍历,且遍历它之后需要回到 \(fa_x\),显然选择 \(p_x\),若不使用传送门,要从 \(p_x\) 到 \(fa_x\) 需要 \(dep_{p_x}-dep_{fa_x}=d_x-dep_x+1\) 步,若使用传送门则用 \(dep_{fa_x}=dep_x-1\) 步,即使用传送门可节约 \(d_x-2dep_x+2\) 步
选择 \(d_x-2dep_x+2\) 前 \(k\) 大的 \(p_x\) 即可(注意不能重复选)
时间复杂度 \(O(n\log n)\)

浙公网安备 33010602011771号