CodeForces - 894B

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/78583092

题目链接:http://codeforces.com/contest/894/problem/B

解题思路:首先k^n要等于k^m,所以当k=-1时,n,m的奇偶性要相同,由于答案只有-1和1,就是意味着当一行中,前面所有的数选好之后,都可以根据最后一位来调节,那么就可以先对前m-1列和前n-1行进行填数,就有2^(n-1)*(m-1)种方案,乘积设为p,再对剩余的格子填数,因为k/(k^(m-1)/p)*(k^(n-1)/p)=k,所以剩下的数填好一定满足各行各列乘积为k

AC代码:

#include<iostream>
using namespace std;

typedef long long LL;

const int MOD = 1000000007;

LL quickPow(LL a, LL b,int mod)
{
    LL ans = 1;
    a = a%mod;
    while (b)
    {
        if (b & 1) ans *= a, ans %= mod;
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

int main()
{
    LL n, m, k;
    cin >> n >> m >> k;
    if (k == -1 && (n + m) % 2)
        cout << 0 << endl;
    else
    {
        LL ans = quickPow(2, n - 1, MOD);
        ans = quickPow(ans, m - 1, MOD);
        cout << ans << endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/78583092