2023.9.20 CF gym 104128 vp

The 2022 ICPC Asia Nanjing Regional Contest
https://codeforces.com/gym/104128

A

我们每一步模拟边界的移动,计算出只有初始位置满足 \(u ≤ i ≤ d\)\(l ≤ j ≤ r\) 的袋鼠才会被保留。
假设洞的初始是 \((0,0)\) 我们同样计算一个洞的移动,我们把洞经过的坐标都记录下来并去重。
那么对于每一个洞,其经过的坐标可以平移得出。
那么我们枚举每个洞,前缀和计算即可。

B

如果没有修改,可以直接单调队列,
\(f_i=min f_j +a_i(i-j\le k)\),要求 \(j\sim i\) 间不能有必须建的塔。
考虑正着求出 \(f_i\),倒着求出 \(g_i\)
对于修改 \(p\) 位置的值,可以重算 \(p\sim (p+k-1)\) 里的 \(f\) 的值,最后求 \(\max(f_i+g_i)\).

C

可以遵循 “能盖的章现在就盖” 的贪心策略。...

D

显然第 \(k\) 大是可以二分的。
考虑二分的值是 \(mid\),那么设已经有 \(cnt\) 个数 \(\ge mid\)
我们如果枚举每个区间都加等差数列的话,复杂度太高,
考虑计算出每个位置的数可以被哪些位置的区间加后 \(\ge mid\),对这些区间做贡献,
最后取贡献最大的区间。

E

观察到把每层的点染黑都是独立的。
如果我们处理深度为 \(D\) 的点,我们可以先做这样一个 dp:
\(f_{u}\) 表示 \(u\) 子树内所有 \(D\) 深度的点都被染黑的最小代价。
\(f_u=\min(a_{D-du},\sum f_v)\).
然而直接跑,是 \(O(Dn)\) 的。
考虑建立虚树,把 \(D\) 深度的点拿出来建虚树,方程变成这样:
\(f_u=\min(\min(a_{D-dx}),\sum f_v)\)。 其中 \(x\)\(u\) 到其在虚树上父亲中的任意一点。
这样是 \(O(n)\) 的,因为每层建出虚树,所有虚树的大小的和是 \(O(n)\).

F

可以证明至少需要 8 个锐角三角形才能构成一个单位正方形。
构造笔者也不会。

G

显然是“神秘石头”更优,于是我们尽量使用"神秘石头”,如果不合法就在上一个岔路口用“卡牌选择”。

H

任选一个点定根,对于一条连接 \(u\)\(fa_u\) 的权值为 \(w_u\) 的边,
如果 \(u\) 的子树内选了 \(i\) 个关键点,那么这条边对
关键点两两距离之和的贡献是 \(w_ui(k − i)\)
\(dp_{u,i}\) 表示以 \(u\) 为根的子树里选了 \(i\) 个关键点时子树里每条边贡献之和的最大值,
现在把一棵以 \(v\) 为根且包含 \(j\) 个关键点的子树合并上来,可以得到转移方程
$ dp_{u,ti} \gets \max ( dp_{u,i} + dp_{v,j} + w_v \times j(k−j) ) (i+j=ti) $

由于两个上凸数组对应位置相加的结果仍然是上凸数组,
两个上凸数组的 \((max, +)\) 卷积的结果仍然是上凸数组(实际就是 Minkowski Sum),
可以归纳证明所有 \(dp_u\) 都是上凸的,
也就是差分数组总是单调不增的,可以使用启发式合并求出每个 \(dp_u\) 的差分数组。
由于需要支持对一个子树里的差分数组打上加等差数列的标记,
需要手写平衡树实现加等差数列的标记下传,
使用 Splay Tree 进行启发式合并可以做到 \(O(n \log n)\) 的复杂度。

I

字符串只能有一种字母,选出出现最多的那个字母即可。

J

当且仅当 \(i+a_i=j+a_j\)\(i-a_i=j-a_j\) 是能配对。
我们把 \(i\) 看成一条边,连接 \(i+a_i\)\(i-a_i\) 两个点,可以看做是二分图。
\(i,j\) 能匹配就是 \(i,j\) 两个边有公共点。
现在我们处理每个联通分量,要找到若干条边不相交的长度为 \(2\) 的链。
如果当前分量边是奇数,无解。
我们从任意一点 dfs,从 dfs 序深的开始处理,
若当前点 \(u\) 除了父亲还有以外偶数个边没有匹配,那么就两两匹配。
若为奇数,那么就把父亲也加入匹配当中。

K

谔谔....

L

一对满足条件的边 \((e, f)\) 符合如下条件之一:
\(e\)\(f\) 中有至少一条割边(是链边且没有被任何额外边覆盖)。
\(e\)\(f\) 中有一条额外边,另一条边是条链边,且该链边只被这条额外边覆盖。
\(e\)\(f\) 都是链边,且所有额外边要么同时覆盖 \(e\)\(f\),要么同时不覆盖 \(e\)\(f\) (被覆盖情况完全相同)。
前两类可以用并查集维护。接下来我们考虑如何维护第三类情况。。。。

M

本题求的就是局部最低点的数量。
注意到局部最低点有两种情况:在平台上和不在平台上。
分别计算即可。

posted @ 2023-09-20 15:01  s1monG  阅读(129)  评论(0)    收藏  举报