https://atcoder.jp/contests/agc036/tasks/agc036_c
题意
有一个长度为 $n$ 的非负整数序列 $x$,初始时全为 $0$。一次操作定义为选择一对正整数 $i,jspace (i≠j)$,将 $x_i$ 加 $2$,将 $x_j$ 加 $1$。求 $m$ 次操作后能出现多少种不同的序列。
$nle 10^6, mle 5 imes 10^5$
题解
降智题,其实很简单
$m$ 轮操作后的序列 $p$ 必定满足如下条件:
1. $sum_{i=0}^{n-1} p_i = 3m$
2. $max{(p_0,p_1,...,p_{n-1})} le 2m$
3. 序列中最多有 $m$ 个数是奇数
但是感觉这样好像就没考虑操作时 $i≠j$ 的约束啊?
事实上你会发现那个东西根本不用考虑。
显然,条件2 可以排除一些只有存在 $i=j$ 的操作时才会出现的序列,但不能排除所有的。然而我们发现没被排除的序列都可以通过不存在 $i=j$ 的操作的途径得到。具体证明我不太清楚,直觉上这个结论很对……
于是问题转化成了求满足条件的序列 $p$ 的数量。
忽略条件2,对于剩下两个条件,可以枚举有多少个数是奇数(假设有 $a$ 个),显然有 $a$ 个奇数的方案数是 $C_{n}^{a}$。然后考虑把这些奇数都当成 $1$,我们接下来要计算的就是使 $n$ 个非负偶数的总和为 $3m-a$ 的方案数,这等价于求 $n$ 个非负整数的总和为 $frac{3m-a}{2}$ 的方案数,用小学的插板法即可,答案是 $C_{(3m-a)/2+n-1}^{n-1}$。用乘法原理把 $C_{n}^{a}$ 和 $C_{(3m-a)/2+n-1}^{n-1}$ 相乘就得到了有 $a$ 个奇数的答案,对于不同的 $a$ 的情况把答案相加即可。
然后我们减掉满足条件1、3,不满足条件2 的情况数。不难发现序列 $p$ 中只有一个数会超过 $2m$,因为序列 $p$ 中所有数的和是 $3m$。于是这部分不用容斥了,我们直接钦定第一个数超过了 $2m$,然后把得到的答案乘以 $n$ 即可。
现在我们要求满足如下条件的序列 $q$ 的数量:
1. $sum_{i=0}^{n-1} q_i = m$
2. 序列中最多有 $m$ 个数是奇数
3. $q_0gt 0$
无视条件3,前两个条件跟之前问题的两个条件一样,用之前的求法即可求出。
然后再减去满足条件1、2,不满足条件3 的情况数。不满足条件3 意味着 $q_0=0$,且它不是奇数,所以无视 $q_0$ 后,这部分情况数就是求满足前两个条件的长度为 $n-1$ 的序列 $q$ 的数量。也用之前的求法即可。
预处理逆元,时间复杂度最低为 $O(n+m)$。