仔细研究一下题目给的条件,实际上在描述一个生成杨图的过程:如果我们按照编号 1,2,,nm/31, 2, \dots, nm/3 的顺序逐块放入网格,任何时刻已经放置的部分都必须是一个合法的杨图(即如果网格中包含了某个点,就必定包含它正左方和正上方所有的点)。

由于我们每次加入的都是一个大小为 33 的连通块,并且加完后依然是合法的杨图,这就要求每一次加上的块必须是一个合法的 Skew Shape。在大小为 33 的骨牌中,能够成为合法斜杨图的只有 44 种(恰好是不会包含 2×22 \times 2 矩形的连通块):水平的 1×31\times 3 长条、垂直的 3×13\times 1 长条以及两种特定的 L 形(▛ 和 ▟)。其他形状无法在此约束下生成。

因此题目等价于求形状为 n×mn \times m 的矩形杨图的 33-条带杨表的数量。

根据 Stanton-White 定理,对于任意一个形状为 λ\lambda 的杨图,如果它的 kk-core 为空,那么它的 kk-条带杨表数量就等价于其 kk-quotient 所对应的标准杨表数量。

对于矩形 n×mn \times m,只要满足 3nm3 \mid nm,由于 33 是质数,必然有 3n3 \mid n3m3 \mid m。已知如果某边长能被 kk 整除,则该矩形的 kk-corn 必定为空,所以此前提必定成立(若 nmnm 不能被 33 整除则显然方案数为 0)。

一个经典的结论是,其 kk-quotient 对应的所有标准杨表数可以通过将原图中 kk 的倍数的钩长除以 kk 后套用钩长公式计算。

因此,3-条带杨表的数量恰好等于:

(nm/3)!xλ, 3h(x)(h(x)/3) \frac{(nm/3)!}{\prod_{x \in \lambda,\ 3 \mid h(x)} (h(x)/3)}

其中 h(x)h(x) 表示格子 xxn×mn \times m 网格中的钩长。对于坐标 (i,j)(i, j)1in,1jm1 \le i \le n, 1 \le j \le m),其钩长为 v=n+m+1ijv = n + m + 1 - i - j

n×mn \times m 的矩形中,我们不需要逐个遍历格子去算钩长。钩长 vv 的取值范围在 11n+m1n+m-1 之间。很容易发现,钩长等于 vv 的格子数目为:

f(v)=min({v,n,m,n+mv}) f(v) = \min(\{v, n, m, n+m-v\})

所以分母部分,只需遍历所有 33 的倍数的 vv,并乘上 (v/3)f(v)(v/3)^{f(v)} 即可。

时间复杂度 O(n+m)O(n+m)