A
贪心就行,不过一开始没看见字符串可以任意取,以为是必须按字符串里的顺序选。
B
考虑贪心的,每次把最小符合条件的放到当前位置上,不过这样可能会导致最后两位不符合条件,特判一下即可。
C
简单树形 DP,令 f i f_i fi 表示以 i i i 为根的子树内最多保存多少个点,那显然有 f i = max ( f l s o n + s i z r s o n − 1 , f r s o n + s i z l s o n − 1 ) f_i=\max(f_{lson}+siz_{rson}-1,f_{rson}+siz_{lson}-1) fi=max(flson+sizrson−1,frson+sizlson−1)。
D
观察样例发现,选取的点的坐标一定在左上、左下、右上、右下的四个 B B B 点内部,否则一定不优。
问题转化为找这四个
B
B
B 点,记坐标为
(
i
,
j
)
(i,j)
(i,j),发现左上右下的点是
i
+
j
i+j
i+j 最小/最大的点,
右上左下的点是
i
−
j
i-j
i−j 最小/最大的点。
然后枚举每个点取最优即可。
E
首先 0 0 0 肯定是要变成 1 1 1 的。
我们找到 l o w b i t lowbit lowbit 最高的一个数 x x x,将其 − 1 -1 −1 便能与其余 l o w b i t lowbit lowbit 比它小的数全部连通,若还有与 x x x 原 l o w b i t lowbit lowbit 相等的数,随便找一个 + 1 +1 +1 即可全部连通。
于是我们得出结论:答案上界不超过 2 2 2。
然后我们只需要检验操作一次是否能满足条件即可,如果不能就按上述方案操作。