2022.1.20 模拟赛

题出的还不错,可惜我太菜了。

T1 刀剑传奇 (swords)

FWT 变换后在点值表示上选 \(k\) 个,再变换回去。也可以理解为高维前缀和 + 容斥。

T2 三格骨牌 (trominoes)

好家伙第一次见杨表题。

容易发现只能填入 ,求保持阶梯状并且填满的操作过程方案数。

关注轮廓线,用 1 表示竖线、0 表示横线,也就是通过

1100 -> 0101
1010 -> 0011
1110 -> 0111
1000 -> 0001

四种操作,将 \(n\)1\(m\)0 变化为 \(m\)0\(n\)1

发现中间两位不变,\(1,4\) 两位由 10 变为 01

所以下标按 \(\bmod 3\) 意义分类,分别计算方案数,然后重标号操作序列。

现在转化为 01 序列每次交换相邻的 10,也就是 \(x\times y\) 的网格图保持阶梯状轮廓线进行填数,也就是 \(x\times y\) 的杨图填数方案数。套用勾长公式,答案为

\[\frac{(xy)!}{\prod_{i=0}^{x-1}\prod_{j=0}^{y-1}(i+j-1)}. \]

实现时需要枚举 \(i+j\) 计算来降低复杂度。

T3 为了部落 (islands)

题意:\(n\) 个有标号点划分成 \(m\) 个有根树,要求每个根的度数不超过 \(k\) 的方案数。模数不为质数。

先枚举 \(m\) 个根。\(m,k\) 相对较小,考虑枚举 \(m\) 个根相邻点的数量。

DP \(f(i,j)\) 表示 \(j\) 个有标号球划分 \(i\) 个有标号盒子,且每个盒子不超过 \(k\) 个的方案数。转移可以容斥

\[f(i,j)\gets i\times f(i,j-1)-\binom{j-1}{k}\times i\times f(i-1,j-(k+1)) \]

复杂度 \(\mathcal O(mk^2)\)

假设有 \(r\) 个点与这些根相邻,\(n-m\) 点要划分成 \(r\) 棵树的森林,就可以用 prufer 序列计数。

扩展 Cayley 公式:

\(N\) 个点 \(M\) 棵树,并且点 \(1\dots M\) 属于不同的树,方案数为

\[MN^{N-M-1} \]

也就是填入长为 \(N-M\) 的 prufer 序列,最后一个被填入的数必须是 \(1\dots M\)

答案也就是

\[\binom{n}{m}\times\sum_{r=0}^{\min(mk,n-m)}\binom{n-m}{r}\cdot f(m,r)\cdot r\cdot (n-m)^{n-m-r-1} \]

还有一种方法:用虚点把这 \(r\) 个点连起来就是一棵树了,强制虚点度数为 \(r\),也就是 prufer 序列里恰好 \(r-1\) 个位置填虚点,推出来是一样的。

模数不为质数,但是需要求上指标很大的组合数。可以将模数分解质因数,对于所有数,包含的这些特殊质因数记录次幂,剩余部分和模数互质可以正常计算。

posted @ 2022-01-20 21:09  RenaMoe  阅读(74)  评论(0编辑  收藏  举报