CF做题笔记
CF 874, Div 3
E - Round Dance
有 \(n\leq 2\times 10^5\) 个人,他们排成了若干个环。每个人只记得他左边或者右边其中一个人的编号,问环数量的最小值和最大值。
相邻的人之间连一条无向边,dfs 遍历之后得到若干个环和链,大小大于等于 3 的环只能单独成环,而二元环和链可以随意拼接组合。设前一类有 cnt 个,后一类有 cct 个,那么在 \(cct\geq1\) 时,最少有 cnt+1 个环,最多有 cnt+cct 个环。
CF 876, Div 2
D - Ball Sorting
给定一个 \(n\leq 500\) 的小球序列,假设有 k 个 0 号小球放入序列中,其中在 0 号小球左右的小球可以随意拿出并插入序列中的其他位置,一次拿出算一次操作,问对于所有 \(k\leq n\),其最小的操作次数是多少。
首先不考虑小球的数量,假设有充足的小球,要求最少的移动次数,我们只需要拿出序列的最长上升子序列,这就是始终不会移动的小球的数量。
加上小球数量的限制。设始终不会移动的小球的集合为 \(S\),显然集合需要满足单调上升,它们将整个序列分为 \(f(S)\) 段,那么就需要 \(f(S)\) 个小球来调整这些段里小球的顺序。
考虑使用 dp 来求解。设 \(f_{i,j}\) 表示 \(1\sim i\) 位,上升子序列将序列分成了 \(j\) 段,最大长度为 \(f_{i,j}\),转移一下即可。
CF 877, Div 2
D - Bracket Walk
给定一个 \(n\leq 2\times 10^5\) 的括号序列,要求将一个光标从 1 移动到 n,光标可以向左右移动,每次移动都会将新的位置的括号记录下来,问是否存在这样一种移动方式,使得记录下的括号序列是匹配的。有 \(q\leq 2\times 10^5\) 次询问,每次询问修改一个位置的括号,回答是否存在满足上述条件的移动方式。
- 注意到每次将光标向前移再移回来,新增的括号个数一定为偶数,所以在 n 为奇数的括号序列就不存在一种方式合法。
- 括号序列如果开头是 ),或者结尾是 (,那么这个序列也是不存在合法移动方式的。
- 如果出现连续两个相同的括号,那么就可以产生任意多个该符号,后面有多少个与之相异的符号也不用去考虑。但如果连续两个 )出现的位置比连续两个 ( 出现的位置要小,或者连续两个 (出现的位置比连续两个 )出现的位置要大,也就无法匹配,不存在移动方式,反之则一定存在。
E - Count Supersequences
组成数字的区间在 \([1,k]\),给定一个 \(n\leq 2\times 10^5\) 的序列,求有多少个长度为 \(m\leq 10^9\) 的序列,满足给定序列是其子序列。
给定序列的组成对答案没有影响。考虑反推,假设最长匹配长度为 i,先用组合数确定选定的位置,那么剩余的每个位置为了保证匹配的位置,就只有 k-1 个选择,答案为 \(k^m-\Sigma_{i=0}^{n-1}C_m^i(k-1)^{m-i}\)。

浙公网安备 33010602011771号