[ABC247-F] Cards
转化问题,将每一张牌看成一条边 \((P_i,Q_i)\) ,问题就转化成若干个环的答案积,每一个环的答案都是选择若干边,使得所有点都至少存在一条边被选择的方案。考虑断环为链,可以发现可以用 \(\rm dp\) 解决,设 \(f_x(n,0/1)\) 表示预设第一个点是否选择 \(x\in \{0,1\}\) ,考虑了前 \(i\) 个点,其中第 \(n\) 个点是否已经被覆盖的方案数,转移显然。那么一个大小为 \(n\) 的答案是 \(f_0(n,1)+f_1(n,0)+f_1(n,1)\) 。
[CF1601-C] Optimal Insertion
将 \(b\) 从小到大排序,这时 \(b_i\) 插入位置设为 \(p_i\) 表示插入到 \(a\) 的第 \(p_i\) 个数和第 \(p_i+1\) 个数之间。那么有 \(p\) 单调不降。证明可以考虑排序之后交换 \(b\) 中的两个数,可以发现答案一定会变劣。
考虑分治,用函数 \(\mathrm{solve}(l_a,r_a,l_b,r_b)\) 计算 \(b_{l_b\dots r_b}\) 的位置,位置可以为 \(a_{l_a\dots r_a}\) 中任何一个。设 \(m = \left\lfloor\frac{l_b+r_b}{2}\right\rfloor\) ,容易想到用若干个循环计算出 \(p_m\) 。然后分治计算 \(\mathrm{solve}(l_a, p_m, l_b, {m-1}), \mathrm{solve}(p_m, r_a, m+1, r_b)\) 。是计算复杂度是 \(O((n+m)\log_2(n+m))\)
最后计算一遍逆序对。
[CF1039-D] You Are Given a Tree
考虑对于单个 \(k\) ,可以使用树上贪心求出。同时可以发现随着 \(k\) 增加,答案一定是单调不升的,因此可以使用类似上一题的分治进行求解。
[CF1658-F] Juju and Binary String
将原数组复制一份连到末尾变成 \(S'\),这时候有一个结论,有解当且仅当存在一个 \(S'\) 中的长度为 \(m\) 的子串的 \(\rm cuteness\) 等于原串的 \(\rm cuteness\) 。(有点神奇)
考虑滑动窗口,每向右移动一格,子串(窗口)中 \(\texttt{1}\) 的个数变化只能是 \(\pm 1\) ,假如合法的子串需要的 \(\texttt{1}\) 的个数为 \(g\) ,那么假设存在两个子串,其 \(\texttt{1}\) 的个数分别 \(<g\) 和 \(>g\) ,那么这两个子串之间一定存在一个合法的区间。显然不存在都是 \(<g\) 或者 \(>g\) 的情况。
[CF1270-F] Awesome Substrings
考虑枚举一个整数 \(k\) ,然后求出 \(k(c_r-c_l)=r-l\Leftrightarrow r-kc_r=l-kc_l\) 的区间 \((l,r]\) 个数。
然后根号分治。
对于 \(k\leq \sqrt{n}\) ,这时候直接暴力枚举 \(k\) 统计就行了。
对于 \(k\ge \sqrt{n}\) ,这时候 \(c_r-c_l=\frac{r-l}{k}\leq \sqrt{n}\) ,因此对于每一个合法区间, \(\texttt{1}\) 的个数都不多,这时候枚举 \(l\) ,然后枚举 \(k\) ,可以合法的 \(r\) 的范围,