仔细研究一下题目给的条件,实际上在描述一个生成杨图的过程:如果我们按照编号 1,2,…,nm/3 的顺序逐块放入网格,任何时刻已经放置的部分都必须是一个合法的杨图(即如果网格中包含了某个点,就必定包含它正左方和正上方所有的点)。
由于我们每次加入的都是一个大小为 3 的连通块,并且加完后依然是合法的杨图,这就要求每一次加上的块必须是一个合法的 Skew Shape。在大小为 3 的骨牌中,能够成为合法斜杨图的只有 4 种(恰好是不会包含 2×2 矩形的连通块):水平的 1×3 长条、垂直的 3×1 长条以及两种特定的 L 形(▛ 和 ▟)。其他形状无法在此约束下生成。
因此题目等价于求形状为 n×m 的矩形杨图的 3-条带杨表的数量。
根据 Stanton-White 定理,对于任意一个形状为 λ 的杨图,如果它的 k-core 为空,那么它的 k-条带杨表数量就等价于其 k-quotient 所对应的标准杨表数量。
对于矩形 n×m,只要满足 3∣nm,由于 3 是质数,必然有 3∣n 或 3∣m。已知如果某边长能被 k 整除,则该矩形的 k-corn 必定为空,所以此前提必定成立(若 nm 不能被 3 整除则显然方案数为 0)。
一个经典的结论是,其 k-quotient 对应的所有标准杨表数可以通过将原图中 k 的倍数的钩长除以 k 后套用钩长公式计算。
因此,3-条带杨表的数量恰好等于:
∏x∈λ, 3∣h(x)(h(x)/3)(nm/3)!
其中 h(x) 表示格子 x 在 n×m 网格中的钩长。对于坐标 (i,j) (1≤i≤n,1≤j≤m),其钩长为 v=n+m+1−i−j。
在 n×m 的矩形中,我们不需要逐个遍历格子去算钩长。钩长 v 的取值范围在 1 到 n+m−1 之间。很容易发现,钩长等于 v 的格子数目为:
f(v)=min({v,n,m,n+m−v})
所以分母部分,只需遍历所有 3 的倍数的 v,并乘上 (v/3)f(v) 即可。
时间复杂度 O(n+m)