1 条题解
-
0
自动搬运
来自洛谷,原作者为

Mivik
AFO搬运于
2025-08-24 22:30:42,当前版本为作者最后更新于2021-04-15 23:54:00,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Subtask 1
一共只有 种选择方案,直接统计并输出即可。
Subtask 2
记 为考虑了前 个数,用到了 个,异或值为 的方案数。直接 暴力转移即可。
Subtask 3
先不考虑不能选同一个数的条件,那么令 为 在给定的数中的出现次数,答案就是 ( 是异或卷积)。用 算出这个后我们再减去选到同一个数的情况就好了。
Subtask 4
下文我们令 。定义一个序列的权值向量为一个长度为 的向量,其中序列的第 位为 在原序列中出现的次数;并额外定义一个数 的权值向量就是 的权值向量。那么 个数的异或就是它们的权值向量 后逐位相乘再 回去。然后我们对这个向量逐位考虑。根据 的定义我们知道
$$\mathrm{FWT}(v)_i=\sum_{j=0}^{L-1}(-1)^{\mathrm{pop}(i\&j)}v_j $$其中 是 二进制下 的个数, 是位与(Bit-And)运算。其次我们知道 是一个线性变换,也就是说 ,我们要算答案可以把所有情况的 加起来得到答案的 。
不难发现一个正整数的权值向量 后每一项只能是 。对于答案 中的每一个位置,我们相当于是要从一些 和 中选出 个,然后算乘积,并对所有方案求和。假设我们知道这一个位置上有 个 , 个 ,于是答案的 上这一位的值就是
$$\begin{aligned} &[x^m](1-x)^a(1+x)^{n-a}\\ =&\sum_{i=0}^m(-1)^i\binom ai\binom{n-a}{m-i} \end{aligned} $$这个可以 计算。现在问题是我们怎么对每一个位置都算出 。不难发现每一个位置上面数的和是
这个是可以一遍 算出来的,然后解一下方程就可以知道 了。于是我们就可以 得到答案的 ,然后 得到答案。总时间复杂度 。
Subtask 5
不难发现我们可以对每一个可能的 (即 间任意整数)用 预处理出上面那个式子的值,于是我们就在 的时间复杂度内通过了这一 Subtask。
Subtask 6
好耶,是防 AK不难发现上面那个式子是关于 的一个 次多项式,我们可以预先对 求出点值然后插值得到多项式,最后我们再多点求值求至多 个点值即可。
不过我们注意到由于 是 级别,我们没法以朴素形式为基础直接卷积得到点值,于是我们对原式变形:
$$\begin{aligned} &\sum_{i=0}^m(-1)^i\binom ai\binom{n-a}{m-i}\\ =&\sum_{i=0}^m(-1)^i\frac{a!(n-a)!}{i!(a-i)!(m-i)!(n-a-m+i)!}\\ =&a!\sum_{i=0}^m\frac{(-1)^i}{i!(m-i)!}\frac{(n-a)^{\underline{m-i}}}{(a-i)!}\\ =&\frac{a!}{n^{\underline a}}\sum_{i=0}^m\frac{(-1)^i}{i!(m-i)!}\frac{n^{\underline{m+(a-i)}}}{(a-i)!} \end{aligned} $$于是就可以正常卷积了。时间复杂度 。
- 1
信息
- ID
- 6642
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者