第七次 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)$。

posted @ 2023-07-27 17:12  Jijidawang  阅读(16)  评论(0)    收藏  举报  来源