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!\)
代码太简单就不放了