A

判断 $n \bmod m = 0$ 即可。

B

这里是没有绝对值的,所以从大到小排序即可。

C

每一个数 $k$ 进制分解后统计每一位的和是否 $\leq 1$

D

枚举最大值位置 $i$,最大值是 $j$ ,答案是:

$$ \begin{aligned} \sum_{i=2}^{n-2} \sum_{j=1}^m \binom{j-1}{n-2} \binom{n-3}{i-2} (n-2) &= (n-2)\sum_{i=2}^{n-2}\binom{n-3}{i-2}\sum_{j=1}^m \binom {j-1}{n-2}\\ &=(n-2)2^{n-3}\binom{m}{n-1} \end{aligned} $$

(第一行的意思是先选出剩下的数,然后选出在最大值前面的数,最后选出相等的数。

然而这个结果是有一个组合意义的:首先我们只有 $n-1$ 个不同的数,所以选出来的方案数是 $\binom m{n-1}$,然后我们要选出出现两次的数,发现这个数不能是最大值,所以方案数 $(n-2)$,最后考虑除了最大值和出现两次的数之外,每个数都可以选择在最大值左边或右边,方案数 $2^{n-3}$,注意特判 $n=2$。

E

做法1

设 $f_{l,r}$ 表示区间 $[l,r]$ 能被缩成的最短长度,转移的时候枚举一个分界点,强制这个点不发生合并,递归下去做即可。

但是这样我们会漏掉一种情况:左右两个区间合并后只剩下一个数,这两个数可以合并(发现更改分界点不会枚举到这种情况),这时候我们要记个$w_{l,r}$ 表示按照 $f_{l,r}$ 缩后这个区间的和,有这种情况判断两边 $w$ 是否相等即可。

做法2

我们观察最终的答案序列每个数一定是一个区间缩成 $1$ 个数的结果,我们只要预处理出 $f_{l,r}$ 表示 $[l,r]$ 能否被缩成一个数就能用一个 $O(n^2)$ dp 做完这个题了。

处理 $f$ 和上面类似的思路。。记录一个 $w$。。

F

这是个 Nim 游戏,我们先考虑如何求单个游戏的 SG 值:

设 $f_{i,0/1/2}$ 表示数字 $i$,上一次操作是 $0/1/2$ 的 SG 值,考虑定义有:

$$ \begin{aligned} f_{i,0} &= \text{mex}\{f_{i-x,0},f_{i-y,1},f_{i-z,2}\}\\ f_{i,1} &= \text{mex}\{f_{i-x,0},f_{i-z,2}\}\\ f_{i,2} &= \text{mex}\{f_{i-x,0},f_{i-y,1}\}\\ \end{aligned} $$

如果能求出来每个点的 SG 值就好做了:只需要枚举每一种第一次操作,算算 异或和是不是 $0$ 就好了。

显然直接做不行,但是观察一下转移就感觉周期长度应该是一个 $\text{lcm}$ 之类的东西,打表发现很短,直接每次暴力求周期就行了。注意这个题周期不是从头开始的,是从某个位置开始的(很多题都是!!)

G

相当于给你一个 Trie 树。

首先串 $i$ 的排名 $r_i$ 可以用类似 $dfn$ 序的东西处理出来:只有在特殊点上才让时间戳 $+1$。然后我们从一个点 $u$ 到特殊点 $v$ 的代价就可以是 $r_v-r_u$ 了,之后就是一个简单的 dp:设 $f_i$ 表示凑出 $i$ 的答案,转移

$$ f_i = \min\{f_{fa_i}+1,f_{anc}+dfn_i-dfn_{anc}\} $$

可以 dfs 的时候用 multiset 维护 $f_{anc}-dfn_{anc}$,但是其实可以用树上的单调栈快速完成这一操作,详情请看

的 A 题。

Last modification:September 16th, 2020 at 09:05 pm
如果觉得我的文章对你有用,请随意赞赏