场外云选手,全程智障。
A Parity
数据范围小,快速幂随便搞一下。
B Tape
有一段长度为 $m$ 的序列,其中一些位置坏掉了,现在可以用最多 $k$ 个线段覆盖这些坏掉的位置,求最小的覆盖线段总长度。
考虑反面,用 $k$ 段覆盖这些位置,等价于将 $n-k$ 个坏掉位置合并,合并后变成 $k$ 个连续段。
差分一下,拖出来排序,取前 $n-k$ 个。
云选手以为要二分,显然有单调性,但是并不能贪心构造。
C Meaningless Operations
求 $f(a)=\max_{0 < b < a} \gcd(a \oplus b, a \text{&} b)$。
考虑 $a$ 的二进制表示,如果里面有 $0$,那么 $b$ 相应位置设为 $1$,这样 $a \text{&} b$ 为 $0$, $a \oplus b$ 为 $2^k-1$,显然最大。
所有只需要考虑 $a=2^k-1$ 的情况,只有 $25$ 种,打个表即可。
D Jongmah
给定一个序列 $a$,$1 \le a_i \le m$,将序列内元素组成一些三元组,满足三元组三个元素为三个连续整数或三个相同整数,求最大能组成多少三元组。
设 $dp[i][j][k]$ 表示考虑到 $i$ 个位置,以第 $i$ 个位置为首组成 $j$ 个连续三元组,第 $i-1$ 个位置为首组成 $k$ 个连续三元组。
然后,观察到组成 $j+3$ 个连续三元组实际上和组成 $j$ 个连续三元组等价,因为可以把横行变成竖列,数目相同,因此只需要考虑 $0 \le j<3, 0 \le k<3$。
转移方程
$$
dp[i][j][k]=\max(dp[i][j][k], dp[i-1][k][h]+{(cnt[i]-j-k-h) \over 3}+j), j+k+h \le cnt[i]
$$
云选手没注意到这个结论。
E Magic Stones
给定一个序列 $c$,每次操作可以选择除了首尾的一个位置 $i$,执行
$$
c_i=c_{i-1}+c_{i+1}-c_i
$$
判断一下 $c$ 通过这样的操作变成 $t$。
注意到每次这个操作,实际上是交换了左右的差分值,因此只需要判断 $c,t$ 的差分数组排完序是否相同即可。
注意特判首尾位置。
云选手以为要大讨论。
F Nearest Leaf
顶点编号按照 $dfs$ 序给出一棵带边权的有根树,每次在编号 $[l,r]$ 范围内,询问距离顶点 $v$ 最近的叶子的距离。
离线所有询问,$dfs$ 到一棵子树的时候,相当于子树内所有叶子的距离减去这条边的长度,子树外所有叶子的距离加上这条边的长度,线段树维护即可。
裸题没人做是什么情况?