容斥原理 + NTT .
每行必须有 $2$ 个石子,考虑枚举 $k$ 列有 $2$ 个石子,则有 $2(n-k)$ 列有 $1$ 个石子.
记 $S(k)$ 表示选出了这 $2n-k$ 列后放入石子的方案数,则
$$
ans=\sum_{k=0}^n \binom{m}{k} \binom{m-k}{2(n-k)} \cdot S(k)
$$
可以转化成二分图模型,左边有 $n$ 个点,度数均为 $2$ ,右边有 $k$ 个点度数为 $2$ ,有 $2(n-k)$ 个点度数为 $1$ .
那么 $S(k)$ 就是这样的二分图的数目.
将每个度数为 $2$ 的点拆成两个点,直接在这 $4n$ 个点中连边,再去掉出现了重边的方案数.
考虑容斥,枚举有 $i$ 条重边,得到
$$
S(k)=\frac{1}{2^{n+k}} \sum_{i=0}^n (-1)^i \binom{n}{i} \binom{k}{i} i!\cdot 2^i\cdot (2n-2i)!
$$
这可以用 NTT 做一次卷积直接算出,时间复杂度 $O(n\log n)$ .
1 | //%std |