24.2.13 ~ 4.13 Codeforces Round 925 & 926 & 934 & 939 (Div.3 / Div.2 * 3)
925 Div.3
Solve : A~G (7/7)
Rank : 95
Rating : \(0+706=706\)(\(1400+206=1606\))
Perf : 2224 | 2089
发挥评价:Normal+
本场没什么有价值题目。
926 Div.2
Solve : A~D F (5/6)
Rank : 72
Rating : \(706+575=1281\)(\(1606+225=1831\))
Perf : 2506 | 2361
发挥评价:Good
本场没有什么失误。
CF1929E
*2300 (me *2300)
选中最少边使得给定的所有 \(k\) 条路径都有边被选中,\(k\le 20\)。
发现效果本质不同的边只有 \(O(k)\) 种,去重后状压 DP 即可。
934 Div.2
Solve : A~D (4/6)
Rank : 123
Rating : \(1281+345=1626\)(\(1831+95=1926\))
Perf : 2211 | 2173
发挥评价:Normal-
失误:会了 D 后先看了会 E/F,导致 D 过得很晚,事实上 E/F 有难度。
以后打 CF 会了就写,不要搁置。
CF1943C
*2300(me *2100)
给定一棵树,初始每个节点为白色,每次可以任选一节点 \(x\) 和距离 \(d\)(可以为 \(0\)),将所有与 \(x\) 距离为 \(d\) 的点染黑,求最小的把所有点染黑的操作次数。
怎么当初这么简单的题都不会。
容易想到一个策略就是选择直径中点一层一层染色,看起来挺对的。
如果想不到也没关系。
考虑一条链上一次最多只能染色两个点则假设直径上点数为 \(d\),总次数有下界 \(\left \lceil \frac{d}{2} \right \rceil\)。
而根据上文操作方法,这也大概是上界。
首先 \(d\),为奇数太简单,直接选取直径严格中点即可。
否则需要选取两个中点都操作,其中 \(d\) 是 \(4\) 倍数时候可以直接搞定。
\(d\) 不是 \(4\) 的倍数时,最后必然剩下两个需要两次才能搞定。
CF1943D(1/2)
定义一个长为 \(n\) 的数列是好的,当且仅当可以通过多次长不为 \(1\) 的区间减 \(1\) 删除到全 \(0\)。
求长为 \(n\),每一项在 \([0,k]\) 之间的好序列的个数。
\(k \le n,n\le 400,3000\)。
Solution:
好题目。
请先观察性质。
将区间减改为单点在差分数组上修改,则原问题等价于 \(\Sigma_{j=1}^{i-2}b_j\geq -b_i\),然后就又等价于 \(a_{i}\le a_{i-1}+a_{i+1}\)。
这手迂回是很帅的,然后直接 DP,至少要记录上两位,即便前缀和优化复杂度仍然是 \(O(n^3)\) 的,可以通过 D1。
现在这个 DP 并没有抓住另一个性质:不合法位置不相邻。
于是我们记录 \(g_{i,j}\) 表示正好在第 \(i\) 位出现不合法的情况,发现 \(g_{i,j}\) 只与 \(f_{i-2}\) 部分有关,而中间一位能填的数量正好形成一个阶梯形,二位前缀和优化即可。
这个性质利用相当好啊。
939 Div.2
Solve : ABD (3/6)
Rank : 1134
Rating : \(1626+118=1744\)(\(1926-32=1894\))
Perf : 1798 | 1798
发挥评价:Bad
失误:C 似了。
CF1956E(1/2)
题意太长,略。
Solution:请先观察形态。
发现 \(a_i=0\) 时候等价于 \(i\) 去世了,去世之后没有任何影响。
于是经过较少轮后,存活的部分变成很多条链。
具体地:\(O(\sqrt{V})\) 轮后,链长全不超过 \(2\),\(O(^3\sqrt{V})\) 轮后,链长全不超过 \(3\)。
而两者都可以 \(O(1)\) 解决,故模拟即可。

浙公网安备 33010602011771号