第七次 ABC
A
$\log\prod a_i=\sum\log a_i$,点权取对数转化成最大加和独立集,转移同时记一下真实乘积即可。
B
构造 $\lceil\dfrac n2\rceil$ 个序列,第 $i$ 个序列的第 $j$ 项为 $(2i-1)2^{j-1}$,
这些序列形如:
$$ \begin{aligned} &1,2,4,8,16,32\dots\\ &3,6,12,24,48,96\dots\\ &5,10,20,40,80,160\dots\\ &\dots \end{aligned} $$
第 $i$ 个序列的长度 $l_i$ 为第 $i$ 个序列中最后一个 $\le n$ 的数的位置。
问题转化为,在这些序列中选出 $m$ 个数,使得同一序列中相邻两项必有一选一不选。
对于 $l_i$ 为偶数的序列,其中选出的数的个数一定为 $\sum\limits_{l_i\bmod 2=0}\dfrac{l_i}2$,
而其中每个序列有两种选法,所以选出这 $\sum\limits_{l_i\bmod 2=0}\dfrac{l_i}2$ 个数的方案有 $2^{\sum[l_i\bmod 2=0]}$ 种。
对于 $l_i$ 为奇数的序列,其中一定有 $m-\sum\lfloor\dfrac{l_i}2\rfloor$ 个序列选出 $\lceil\dfrac{l_i}2\rceil$ 个数,其余序列选出 $\lfloor\dfrac{l_i}2\rfloor$ 个数,
所以选出这些数的方案有 ${\sum[l_i\bmod 2=1]\choose m-\sum\lfloor\frac{l_i}2\rfloor}$ 种,总方案有 $2^{\sum[l_i\bmod 2=0]}{\sum[l_i\bmod 2=1]\choose m-\sum\lfloor\frac{l_i}2\rfloor}$ 种。
需要统计 $\sum[l_i\bmod 2=0],\sum[l_i\bmod 2=1],\sum\lfloor\dfrac{l_i}2\rfloor$,枚举 $l_i$ 容易做到 $1\log$。
Lucas 定理算组合数即可。
C
根号分治 DP,这么稀有。
算出 $s_1\ge x$ 的序列个数,$s_1>y$ 的序列个数,相减得到答案。
问题变为给定 $x$,求把 $n$ 分解为若干 $\ge x$ 的数的方案数。
可以想到两个 DP:
- $f_{i,j}$ 表示只用 $[x,i]$ 的数凑出 $j$ 的方案数,发现就是一个完全背包。
- $g_{i,j}$ 表示用 $i$ 个 $\ge x$ 的数凑出 $j$ 的方案数,则有 $g_{i,j}=g_{i-1,j-x}+g_{i,j-i}$,
($g_{i-1,j-x}$ 即为 $i-1$ 个数凑出 $j-x$ 的方案数,加一个 $x$ 即可用 $i$ 个数凑出 $j$,
$g_{i,j-i}$ 即为 $i$ 个数凑出 $j-i$ 的方案数,整体加一即可用 $i$ 个数凑出 $j$)
发现都是 $O(n^2)$ 的,所以定一个阈值 $B$,
规定 $f$ 只能用 $<B$ 的数转移,即 $f_{i,j}$ 中 $i<B$,
规定 $g$ 只能用 $\ge B$ 的数转移,即 $g_{i,j}$ 的定义中 $x$ 与 $B$ 取 $\max$,
注意到用 $\ge B$ 的数凑出 $n$ 的方案一定用了 $\le\dfrac nB$ 个数,即 $g_{i,j}$ 中 $i\le \dfrac nB$。
枚举最终方案中 $<B$ 的数的和 $k$,则方案总数为 $\sum\limits_{k=0}^nf_{B-1,k}\sum\limits_{i=0}^{\frac nB}g_{i,n-k}$。
总复杂度 $O(nB+\dfrac{n^2}B)$,取 $B=\sqrt n$ 达到最优 $O(n\sqrt n)$。

浙公网安备 33010602011771号