「泛做题解」Codeforces 第一轮泛做(2013 集训队作业)

注:此博客写于 2018.1

手残选手来泛做一波Codeforces啦。。

(其实就是因为看到了许昊然的成套题解

既然有题解了嘛,那我也就懒得写啦。。

这里记录一些有趣的想法。

7E 根据四则运算的结合律,优先级,来简洁地表示状态。

15E 很不错的递推题,关键是找到阶段,以及合理地分类讨论。

19E 图的 DFS树 ,根据 返祖边 搞搞。二分图,环的奇偶性。

30E 各种子串拼接/回文都是套路,反向串匹配、KMP、manachar,ExKMP。

36E 四个奇点,两条互不重合的欧拉路径?连接两个奇点,再断开。

46F 最大表示法 思想。观察到操作是可逆的,于是令两个状态达到极大/极小的等价状态。

51F 巧妙的边双,缩点完之后变成一棵树。各种 树形DP/dfs序/树剖。。

53E 状压DP,强制顺序。这种防止重复计数的trick应该很套路了吧。。

67C 奇怪的性质带来了无后效性,毒瘤->傻逼DP。

70E 又是一类奇妙的附加状态。涉及到与子树外节点的关系,附加这一维状态。

193D 超赞的线段树 。离线,从差分角度考虑贡献。利用 整数 \(\leq 2\) 的一定是最小值/次小值,避免了分块。

193E 斐波那契数在模 \(10^x\) 意义下,循环节为 \(1.5 \times 10^x (2 \leq x)\)

76F DP条件的转化。变成二维数点之类的东西,然后离线/数据结构。

76A 动态加边MST。只有原有的边和新加入的边有用,边数 \(O(n)\),暴力插入排序即可。

77E 圆的反演。一个圆关于单位圆反演之后,会得到一条直线(圆经过原点),或是另一个圆。相切的关系不变。简单的初中几何知识就可以了。。有意思的

79D 区间修改相关嘛。。考虑异或的 前缀和/差分 转化,区间转单点。一波分类讨论贪心后,转化为图论模型,直接状压DP。

81E 基环外向树DP。一般套路:先外向树DP,再在基环上 序列/区间 DP。但此题呢,可以利用基环的相邻两边至多选择一条的性质,直接两次树形DP。

164D 对于存在各种 互斥/.. 关系,只能染2种颜色,果断二分图。

101E 奥妙重重的分治,减少空间复杂度(加大时间复杂度

113D 对于多个线性方程组,只有右边的向量不同,放在右边一起消元。

115D 表达式DP,一般的想法是区间DP,可是有很多状态是无用的(就像树形DP)。考虑附加的状态是前缀左括号数量。

125E 限制点 \(1\)\(=K\) 的MST。二分偏差值 \(delta\) ,与 \(1\) 相连的一边加上这个偏差值,然后直接MST(用两个指针就不用重复排序了)。如果出现两条特殊边与其他边的边权相同,可能永远无法到达 \(K\) ,比较好的一个做法是加入一个随机的抖动值。

140F 最多增加 \(K\) 个点使得点集对称,按照 \(x\) 优先排序,那么两端的各 \(K+1\) 个点中,任意一个配对方案都能对应到这两个点配对,从两端暴力扫描即可。

147B 期望的线性性,从另一个角度表示贡献。同时利用单调性,只有在需要的时候计算。

217E 倒着思考,舍弃无用的量。树状数组倍增。

135E 主要是找到一个神奇的性质:选出的一定是前缀/后缀。那么分类讨论,组合数算一下就好了。

163D 利用不等式给爆搜剪枝,这里利用了均值不等式。

178F 比较妙的题。LCP嘛,考虑建出Tire,然后直接树形背包DP。但是这样点数是 \(O(n^2)\) ,于是我们可以像后缀树那样压缩点(若干个连续点只有一条出边),因为有用的就是这条边的长度,点数就是 \(O(n)\) 。然后树形背包DP,复杂度 \(O(n^2)\) ,复杂度 \(O(n^2)\) ,复杂度 \(O(n^2)\)

以前这种树形背包DP的数据范围都是 \(300\) ,我也一直以为是 \(O(n^3)\) 的 QwQ,那么来强行口胡一下证明:

\(T(n)\) 就是规模为 \(n\) 的复杂度,于是 \(T(n)=T(s)+T(n-s)+s(n-s)\) ,我们要证明 \(T(n) \leq n ^ 2\)

显然有 \(T(1) = 1\) 。假设对于 \(k \leq n-1\) ,有 \(T(k) \leq k^2\)

\(k=n\)\(T(k) = T(k-s) + T(s) + s(k-s) \leq (k-s)^2 + s^2 + 2s(k-s) = k^2\)

就是一个简单的数学归纳法嘛..

187D 有些情况(最简单的单点修改,区间最值)下可以用 set 代替线段树,还不用 离散化/动态开点。

176E 有用的神结论:考虑一个树上 \(k\) 个点 \(v_1,v_2,...,v_k\) (DFS序递增)的导出子图,边权之和为\(\large \frac {(d(v_1,v_2)+d(v_2,v_3)+...+d(v_{n-1},v_n)+d(v_n,v_1)} 2\) ,就变成了裸题。

200A 在网格上,覆盖了 \(K\) 个点之后,任意一个点到未被覆盖的点的最近距离为 \(O(\sqrt K)\) 。并查集的经典应用:滋瓷删除点,求出每个点未被删除的前驱/后继。

207A 已经有序的序列可以通过归并排序合并,为这道题的构造提供了方向。

猜你喜欢

转载自www.cnblogs.com/cyanic/p/9159500.html