ybtoj 矩阵快速幂G. 2.填充棋盘

ybtoj 矩阵快速幂G. 2.填充棋盘

1 2
3 4

首先我们可以发现 如果要添加一行 添加的一定是1 2 与第一行一样 同理加一列也一定是1 3(可交换位置)

无论添加几行几列都是这样

考虑在当前四个数的情况下添加一行:

1 2 | 1 2
3 4 | 3 4
1 2 | 2 1

我们可以发现:添加一行的两个数一定与第一排一样 且可以交换位置

那么再添加一列呢

1 2 1 | 1 2 3
3 4 3 | 3 4 1
1 2 1 | 1 2 3

显然 第一种情况下 如果我们完全copy第一列或者交换位置 一定是对的

1 2 1 | 1 2 3
3 4 3 | 3 4 1
2 1 2 | 2 1

然鹅 再第二种情况下 这一排、这一列都交换位置情况下 两个1被换一起了

所以说 行与列只能交换一个或者不交换

即:
//交换一行
1 2 1 2 1 2
3 4 3 4 3 4
2 1 2 1 2 1

//交换一列
1 2 3 2
3 4 1 4
1 2 3 2
3 4 1 4
1 2 3 2
3 4 1 4

我们能发现一个性质:两种情况横着、竖着 总有一种像这样:

1 2 1 2 1 2 1 2......
3 4 3 4 3 4 3 4......

那么我们会发现:只要确定第一行/列前两个数 其他位置的数就全确定了 即 \(C_4^2\)

在每个数确定的情况下 每一行列前两个数只有1 2 / 2 1两种情况 那么就有 \(2^m+2^n\) 种方案

而每行每列都不换的方案被算重了

1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4

显然 这时只要确定左上角的四个数就全确定了 那么把1 2 3 4随意排列 即 \(4!\)

所以答案为 \(C_4^2\times (2^m+2^n)-4!\)

代码太简单就不放了

posted @ 2023-10-19 15:52  xiang_xiang  阅读(26)  评论(0编辑  收藏  举报