题目
题解
思路分析
先给出一个 N × M N\times M N×M矩阵格子
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200410215035334.png)
其实我们观察可以知道:左上 ( N − 1 ) × ( M − 1 ) (N-1)\times (M-1) (N−1)×(M−1)矩阵中的数可以随机为-1或1,由最后一行与最后一列来确定下整行整列的乘积,而最终就只剩下右下角哪一个块需要确定了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200410215630636.png)
由上面的分析:我们将矩阵分区成四个部分(不同颜色的框),橙色框中随机,也就是说在没有条件限制时共
2
(
N
−
1
)
(
N
−
1
)
2^{(N-1)(N-1)}
2(N−1)(N−1)种情况。现在由绿色框和紫色框来让前
(
N
−
1
)
(N-1)
(N−1)行和
(
M
−
1
)
(M-1)
(M−1)列满足乘积为
K
.
K.
K.最后就只剩下黄色框了,黄色框取值时能否使得
N
N
N行和
M
M
M列满足乘积为
K
K
K呢?这又取决于绿色框和紫色框种元素的乘积值。
下面分析绿色框和紫色框中乘积的关系:
为了方便,我们对四个部分的元素乘积进行符号化:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200410220552924.png)
求乘积分别为
∏
A
∏
B
∏
C
∏
D
.
\prod_A \prod_B \prod_C \prod_D.
∏A∏B∏C∏D.
如果
K
=
1
K=1
K=1,很容易想到前
(
N
−
1
)
(N-1)
(N−1)行和前
(
M
−
1
)
(M-1)
(M−1)列的所有元素乘积为1,因为每行乘积为1.
即:
∏
A
×
∏
C
=
1
,
∏
A
×
∏
B
=
1.
\prod_A \times\prod_C=1,\prod_A\times\prod_B=1.
A∏×C∏=1,A∏×B∏=1.
⇒
∏
B
=
∏
C
.
\Rightarrow \prod_B=\prod_C.
⇒B∏=C∏.
这时我们知道:BC区域的乘积相同,所以D取1或-1中的一个可以使得乘积满足为1.
如果
K
=
−
1
K=-1
K=−1,我们知道如果行列奇偶性形同,那么等同于
K
=
1
K=1
K=1,但是!
如果
K
=
−
1
K=-1
K=−1,但是行奇偶性不相同呢?可以得到以下不等式:
∏
A
×
∏
C
≠
∏
A
×
∏
B
.
\prod_A \times\prod_C\neq \prod_A\times\prod_B.
A∏×C∏=A∏×B∏.
⇒
∏
B
≠
∏
C
.
\Rightarrow \prod_B\ne \prod_C.
⇒B∏=C∏.
这时我们知道:无法找到一个D的值使得BC两个区域满足条件,这种情况下输出0即可(特判)
代码
#include<iostream>
using namespace std;
int main()
{
int N,M,K;
long long ans;
cin>>N>>M>>K;
if(K==-1&&(N+M)%2!=0) cout<<"0";
else {
ans=1;
for(int i=1;i<=N-1;i++)
for(int j=1;j<=M-1;j++)
ans*=2;
cout<<ans;
}
return 0;
}