A Two Rabbits
B Longest Palindrome
给你 $n$ 个长度为 $m$ 的串,你挑一些出来构造一个最长的回文串。
注意到是每个串长度相同,所以一定是两两配对,加上中间可能会有一个回文串。
C Air Conditioner
你有一个权值,你每天可以选择把他 $+1,-1$ 或者不变,有 $n$ 个条件,第 $t$ 天,权值范围在 $[l_i,r_i]$ 中。
维护一下你的权值的范围即可。
D Shortest and Longest LIS
你有长度为 $n-1$ 的 $<$ 和 $>$ 组成的串,表示 $a_i$ 和 $a_{i+1}$ 的大小关系,你现在需要构造出 LIS 最大和最小两个排列。
我的构造方式过于复杂,以致于没来得及交上去(呲牙)。
一种简单的方式,以 LIS 最小为例,你肯定希望整体是在往上走的,因此对于小于号,权值 $+\infty$,大于号权值 $-1$,这样你每次都是往上升的状态,最后每个值必定不同,离散化即可。LIS 最大,考虑整体往下即可。
E 1-Trees and Queries
你有一棵无根树,$q$ 次询问,独立连一条 $x$ 到 $y$ 的边,询问 $a$ 到 $b$ 是否存在一条长度为 $k$ 的路径,路径可以随意走,可以走重复的点或边。
有 $3$ 种路径,$a \to b$,$a \to x \to y \to b$ 和 $a \to y \to x \to b$,只需要满足长度不超过 $k$,且模 $2$ 同余即可。
F Animal Observation
给你一个 $n \times m$ 的网格,每行最多选一个长度为 $k$,高度为 $2$ 的矩形(往上延伸一格)(特别地,最后一行可以只选一行),求最大的选中权值和。
加一个空行,简化一下变成 $2$ 到 $n+1$ 行。记 $dp(i,j)$ 表示在第 $i$ 行选择 $j$ 开始的那个矩形的最大权值。
转移分成 $3$ 个部分,首先在所有与左下角是 $(i,j)$ 的矩形没有交的的位置的 $dp$ 值,取一个 $\max$。
剩下两个部分是左边相交和右边相交,两种类似,下面讨论右边相交的情况。($Rect(i,j)$ 为这个位置的矩形权值)
$$
dp(i,j) = Rect(i,j) + \max_{i \le j < i + k}(dp(i-1,j) - \sum_{k=j}^{i+k-1} a_{i-1,k})
$$
将上述转移用前缀和差分后,实际上就是一个滑动窗口取 $\max$ 的问题,单调优化即可。
代码
A
1 |
|
B
1 |
|
C
1 |
|
D
1 |
|
E
1 |
|
F
1 |
|