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=7061400+206=1606

Perf : 2224 | 2089

发挥评价:Normal+

本场没什么有价值题目。

926 Div.2

Solve : A~D F (5/6)

Rank : 72

Rating : 706+575=12811606+225=1831

Perf : 2506 | 2361

发挥评价:Good

本场没有什么失误。

CF1929E

*2300 (me *2300)

选中最少边使得给定的所有 k 条路径都有边被选中,k20

发现效果本质不同的边只有 O(k) 种,去重后状压 DP 即可。

934 Div.2

Solve : A~D (4/6)

Rank : 123

Rating : 1281+345=16261831+95=1926

Perf : 2211 | 2173

发挥评价:Normal-

失误:会了 D 后先看了会 E/F,导致 D 过得很晚,事实上 E/F 有难度。

以后打 CF 会了就写,不要搁置。

CF1943C

*2300(me *2100)

给定一棵树,初始每个节点为白色,每次可以任选一节点 x 和距离 d(可以为 0),将所有与 x 距离为 d 的点染黑,求最小的把所有点染黑的操作次数。

怎么当初这么简单的题都不会。

容易想到一个策略就是选择直径中点一层一层染色,看起来挺对的。

如果想不到也没关系。

考虑一条链上一次最多只能染色两个点则假设直径上点数为 d,总次数有下界 d2

而根据上文操作方法,这也大概是上界。

首先 d,为奇数太简单,直接选取直径严格中点即可。

否则需要选取两个中点都操作,其中 d4 倍数时候可以直接搞定。

d 不是 4 的倍数时,最后必然剩下两个需要两次才能搞定。

CF1943D(1/2)

定义一个长为 n 的数列是好的,当且仅当可以通过多次长不为 1 的区间减 1 删除到全 0

求长为 n,每一项在 [0,k] 之间的好序列的个数。

kn,n400,3000

Solution:

好题目。

请先观察性质。

将区间减改为单点在差分数组上修改,则原问题等价于 Σj=1i2bjbi,然后就又等价于 aiai1+ai+1

这手迂回是很帅的,然后直接 DP,至少要记录上两位,即便前缀和优化复杂度仍然是 O(n3) 的,可以通过 D1。

现在这个 DP 并没有抓住另一个性质:不合法位置不相邻。

于是我们记录 gi,j 表示正好在第 i 位出现不合法的情况,发现 gi,j 只与 fi2 部分有关,而中间一位能填的数量正好形成一个阶梯形,二位前缀和优化即可。

这个性质利用相当好啊。

939 Div.2

Solve : ABD (3/6)

Rank : 1134

Rating : 1626+118=1744192632=1894

Perf : 1798 | 1798

发挥评价:Bad

失误:C 似了。

CF1956E(1/2)

题意太长,略。

Solution:请先观察形态。

发现 ai=0 时候等价于 i 去世了,去世之后没有任何影响。

于是经过较少轮后,存活的部分变成很多条链。

具体地:O(V) 轮后,链长全不超过 2O(3V) 轮后,链长全不超过 3

而两者都可以 O(1) 解决,故模拟即可。

本文作者:Fun_Strawberry's blog

本文链接:https://www.cnblogs.com/FunStrawberry/p/18213564

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Fun_Strawberry  阅读(39)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示