W
e
l
c
o
m
e
: )

2023 syzx 春季训练 1

得找个时间把 zr 题补补。。

A

考虑 \(f_{i}\) 只能拆为 \(f_{i-1}+f_{i-2}\),考虑拆 \(f_{i-1}=f_{i-2}+f_{i-3}\) 时,这条 \(f_{i-2} - f_{i-3}\) 的边在另一种方案时还是会被切掉,因此能切就切。

每次直接暴力遍历树找切边,由斐波那契数列的增长即可只复杂度为 \(O(n\log n)\)

B

发现 \(n\) 很小直接 \(2^n\) 枚举绝对值负号 \(t_i\),那么有

\[\sum_{i=1}^{n} t_i(x_i-r_i)=(\sum t_ix_i)-(\sum t_ir_i) \]

\[=(\sum t_ix_i)-(\sum t_{i} \sum s_{i, j} p_j)=(\sum t_ix_i)-(\sum p_{j} \sum s_{i, j} t_i) \]

由于我们计算的是最大值,所以不合法的一定不优,根据排序不等式直接做就好了。

C

考虑每一行最前面一个,如果蓝色没有把某一个小的选上,那么第一列就一定会存在 红 < 蓝 不合法,因此按行首元素排序,一定是前 \(x\) 个蓝色后面全红。

枚举 \((x, k)\),判定条件变为左上角矩形最大值 < 左下矩形最小值 且 右上矩形最小值 > 右下矩形最大值,\(O(nm)\) 预处理即可。

D

在生成树的限制严格强于图,考虑如果一个端点没有被选择偶数次,那么其出边至少有一条被经过奇数次,此时答案为奇数次端点个数的一半(两两配对),否则直接走简单路径即可。

E

枚举 kruskal 排序分界点,每次暴力做一遍,询问二分计算多余贡献即可。

F

二分答案,check 时尽可能让当前数变小。

G

H/I

\(dp_i\) 为以 \(i\) 结尾的好序列个数

\(f_{i}=\min(f_{i-1}+1, a_i)\),所求为 \(\sum dp_i\)

不难发现,最后 \(f\) 可以表示为:

\(a_{x_1}, a_{x_1}+1, a_{x_1}+2 \dots a_{x_2}, a_{x_2}+1, a_{x_2}+2 \dots a_{x_i}, a_{x_i}+1, a_{x_i}+2 \dots\)

考虑修改,若 \(f_{i-1}+1\le a'_i\) ,则 \(f_{i}\),否则后面某段 \([i, x) (a_{x}<a'_i+x-i)\)\(f_j\) 会变为 \(a'_i+j-i\)\(x\) 可以用线段树二分出来。

但是 \([x, n]\) 的贡献没有计算到,但是注意到 \(f_{x}\) 必然为 \(a_x\) (修改并不是真实修改)

我们考虑设 \(g_x\) 为当强制钦定 \(f_{x}=a_{x}\) 时,\(\sum_{i=x}^{n} f_i\) 的值,同理,\(g_{i}=g_j +\sum_{k=i}^{j-1} a_{j}+k-i\),其中 \(a_{j} < a_{i}+j-i\),仍然用上面的线段树二分即可。

J

状压,设 \(dp_{x, S}\) 为选择状态为 \(S\) 的最长合法前缀,预处理每个串不合法的位置计算贡献。

K

\(f_{i, j}\) 为还剩 \(i\) 个人,最大血量为 \(j\) 且最后全员白给无人胜利的方案数。

posted @ 2023-02-24 19:54  127_127_127  阅读(70)  评论(0编辑  收藏  举报