CodeForces

来源:互联网 发布:阿里云怎么做网站 编辑:程序博客网 时间:2024/05/14 02:09

题目链接: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;}
原创粉丝点击