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}$,然后递推就可以了。
2 comments
不错不错,我喜欢看 www.jiwenlaw.com
想想你的文章写的特别好https://www.ea55.com/