First AK Div3…
A Repeating Cipher
模拟。
B Array Stabilization
序列删掉一个数后最小极差。
显然要么删除最后一个,要么删除第一个。
C Powers Of Two
构造,将 $n$ 划分成恰好 $k$ 个 $2$ 的幂次数之和。
我的构造方法:将 $n$ 二进制分解,从最高位往最低位拆,看能不能拆成 $k$ 个。
D Circular Dance
$n$ 个人围成一个环,每个人知道自己前面的两个人是谁,要求恢复出原来的环,保证有解。
实际上是已知了图上的 $n$ 条边,建图 dfs,把环跑出来,特判一下绕行的正反方向。
E Almost Regular Bracket Sequence
给定一个括号序列,数一下有多少个位置翻转后可以使括号序列平衡。
一个括号序列平衡的条件是,对于其每个前缀,左括号数量都大于等于右括号数量,并且最终括号总数相同。
那么可以将左括号设置 $+1$,右括号设置为 $-1$,跑一下序列的前后缀和,然后判断这个位置和其前后缀和加起来是否能够等于 $0$ 即可。
但是这里实际上不能保证满足第一个条件,可以再维护一下前后缀到多少满足这个条件,如果当前位置的子串包含这些非法的前后缀,则跳过。
注意一个细节:左括号变成右括号时,前缀和不能为 $0$。(因为要匹配新加入的括号,不过我的写法好像不需要特判?)
F Make It Connected
给定 $n$ 个点的点权,两个点连边的代价是两个点的点权之和,给定 $m$ 条边,这条边可以选择使用点权和或者这条边权,求最小生成树。
不考虑 $m$ 条边,实际上只需要从点权最小的点连向每一个点即可。
考虑 $m$ 条边,和点权最小的点连出的边一起加到最小堆内,跑一遍 Kruskal。