1. 程式人生 > >Codeforces894B-Ralph And His Magic Field

Codeforces894B-Ralph And His Magic Field

/**
    很有意思的一道題
    題意: n * m 的矩陣, 要求 每一行每一列 的 乘積都為 k (k 為 1 or -1) 問有多少種情況
    注意 fst!如果 n 和 m 的奇偶性質不一樣,當 k == -1 時 無解 ans = 0;
    證明: 當 n , m 不同奇偶時 k = -1;
    每一行 的 乘積 為 -1 則矩陣的值為 (-1)^n
    每一列 的 乘積 為 -1 則矩陣的值為 (-1)^m
    又因為 n m 奇偶性不同 則  (-1)^n != (-1)^m  矛盾 即不存在

    其他情況 ans = power(2,(n-1) * (m-1)) 因為前 n-1行,m-1列可以任意填 1 或者 -1;
*/
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const ll mod = 1000000007; ll power(ll a,ll b) { a%=mod; ll ans = 1; while(b) { if(b&1) ans = ans * a % mod; b>>=1; a = a*a%mod; } return
ans; } int main() { ll n,m,d; while(~scanf("%I64d%I64d%I64d",&n,&m,&d)) { if( (bool)(n%2) != (bool)(m%2) && d == -1) puts("0"); else printf("%I64d\n",power(power(2,m-1),n-1)); } return 0; }