Codeforces 894B - Ralph And His Magic Field

894B - Ralph And His Magic Field

思路:

当k为1时,如果n和m奇偶性不同,那么没有答案。

可以证明,在其他情况下有答案,且答案为2^(n-1)*(m-1),因为前n-1行和m-1列确定后,最后一列和最后一行可以确定,且确定的最后一格不矛盾。

可以采用在全为1的格子中把一些1换成-1的方法来证明以上两条结论。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))

const int MOD=1e9+7;
ll qpow(ll n,ll k)
{
    ll ans=1;
    while(k)
    {
        if(k&1)ans=(ans*n)%MOD;
        n=(n*n)%MOD;
        k>>=1;
    }
    return ans;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll m,n;
    int k;
    cin>>m>>n>>k;
    if(k==1)
    {
        cout<<qpow(2,((m-1)%(MOD-1))*((n-1)%(MOD-1)));
    }
    else
    {
        if((m+n)&1)
        {
            cout<<0<<endl;
            return 0;
        }
        cout<<qpow(2,((m-1)%(MOD-1))*((n-1)%(MOD-1)));
    }
    return 0;
}

 

posted @ 2017-11-21 14:17  Wisdom+.+  阅读(441)  评论(4编辑  收藏  举报