A

弱智题。

B

模拟一下就好。

C

很显然只要存在相邻两个加起来大于 $L$ 就可以,方案的话就是最后割这两个,之前从外面往里割就行。

D

这个以前博客写过来着。

经过的边的最大编号最小,肯定是二分。

二分最大的边的编号,看前面的边组成的联通块大小,这个建出 Kruskal 重构树然后判断 LCA 就行。

E

牛逼博弈,完全不会做。

首先把 $a_i$ 从大到小排序,然后考虑一个网格图,每个点的坐标是 $(i, a_i)$,最开始在 $(1, 1)$。

这个时候注意到把最大的那一堆全部取走就相当于往右走一格,把所有堆都取走一个相当于往上走一格。

于是问题就转化为谁第一个走到边界上谁输。

数据范围很大,不能直接 DP,这个时候注意到 $(1, 1), (2, 2), \cdots, (i, i)$ 这些点的胜负状态都是一样的,于是取这条对角线上最大的那个点判断就行。

F

状态的设计还是很困难的。

首先用常见的前 $i$ 个球,放了 $j$ 个白球的套路肯定是做不了的,没有每一种颜色的球用了几个,完全转移不了。

考虑直接从整个序列的形态入手。设 $f(i, j)$ 表示整个序列当前放了 $i$ 个白球,$j$ 种其他颜色的球。

$f(i, j)$ 显然可以从 $f(i - 1, j)$ 转移来,比较复杂的是 $f(i, j - 1)$ 的情况。

首先需要选一个颜色,有 $n - j + 1$ 种选择,接下来如果直接放 $k - 1$ 个球进去的话是会产生重复的(手玩一下就能发现),于是我们钦定第一个球放在最左边的合法的位置,然后从第二个球开始放,这样方案数就是 $\dbinom{nk - i - (j - 1)(k - 1) - 1}{k - 2}$,然后递推就可以了。

Last modification:December 8, 2023
如果觉得我的文章对你有用,请随意赞赏