(感觉这场难度都不大啊)
A. Digits Sum
$lfloorfrac{n+1}{10} floor$
B. Reverse String
枚举
C. Penalty
枚举
D. Backspace
倒着试图匹配,如果不匹配就连删两个。
E. Permutation Shift
注意到 $mleqfrac{n}{3}$,则一个合法排列的环数 $cgeqfrac{2n}{3}$,长度为 $1$ 的环数 $dgeqfrac{n}{3}$(这是由于 $d+2(c-d)leq n$),因此至多只要检查 $3$ 个。
F. Pairwise Modulo
新加一个数的时候,要计算他 $mod$ 其他数 和 其他数 $mod$ 他,分别用两个 BIT 维护即可。由于所有数互不相同,BIT 上修改的次数为调和级数,总复杂度两个 log。
G. Common Divisor Graph
分个类讨论一下:如果两个数都是偶数,必然连通,那么答案为 $0$。如果两个数恰好一个是偶数一个是奇数,且不连通的话,答案为 $1$。这两个都很好搞,求出所有数的质因子做并查集即可。如果两个数都是奇数,且不连通,答案要么为 $1$ 要么为 $2$,如果存在一个数使得操作它之后能让这两个数连通,则答案为 $1$,这个只需要对每个数求出操作它之后能连通的所有连通块,存在一个 set 中即可。
H. XOR and Distance
建出 trie,考虑用 $(p, mask)$ 表示节点 $p$ 所在子树中,这些数异或的值为 $mask$,最小缝隙和最小值最大值是多少。由于 $mask$ 只需要考虑子树内的位,因此总状态数 $O(k2^k)$。然后只要分情况讨论,进行转移即可。
I. Stairs
把极长的这种连续段找出来,每个数肯定恰好被覆盖一次。所以根据 $a$ 数组可以直接推断出所有极长的连续段的长度组成的序列 $b$。现在的问题就变成了给定 $b$ 求满足 $b$ 的排列个数。在相邻两个连续段之间的断点不好处理,考虑容斥,即强制某些连续段被合并,然后计算方案的话,就是合并后的连续段数的阶乘 × 2 的长度非 1 的连续段个数次方。考虑分治 NTT,记录最左和最右连续段旁边的这两个断点是否被合并,就可以了。