我们定义一个矩阵为“好矩阵”,当且仅当该矩阵所有2*2的子矩阵数字和为偶数。
例如:
是好矩阵,两个2*2的子矩阵的和分别是8和12。
请问
行
列,矩阵中每个数均在
范围内的好矩阵有多少种?由于答案过大,请对
取模。
数据范围:
保证
为偶数。
保证
class Solution {
public:
int mod = 1e9 + 7;
int func(long long a, long long b) {
long long res = 1;
while (b)
{
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res % mod;
}
int numsOfGoodMatrix(int n, int m, int x) {
long long a = n;
a *= m;
long long ans = func(x / 2, a);
ans *= func(2, n + m - 1);
ans %= mod;
return ans;
}
}; # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int整型 # @param m int整型 # @param x int整型 # @return int整型 # class Solution: def numsOfGoodMatrix(self, n: int, m: int, x: int) -> int: # write code here MOD = int(1e9 + 7) return pow(x >> 1, n*m, MOD)*pow(2, n + m - 1, MOD) % MOD
const mod int = 1e9 + 7
func qpow(x, n int) int {
ans := 1
for n > 0 {
if n&1 == 1 {
ans = ans * x % mod
}
x = x * x % mod
n >>= 1
}
return ans
}
func numsOfGoodMatrix(n, m, x int) int {
ans := qpow(x, m) * qpow(2, n - 1) % mod * qpow(x / 2, m * (n - 1)) % mod
return ans
} #include <bits/stdc++.h> using namespace std; const int mod = 1e7; typedef long long LL; LL res = 0, n, m, x; LL f1[mod], f2[mod]; LL v1, v2; LL vs1[mod], vs2[mod]; LL C[mod]; int main() { cin >> n >> m >> x; v1 = (x % 2 == 0) ? x / 2 : x / 2 + 1; // 奇数 v2 = x / 2; C[0] = 1; for (int i=1;i<=m;i++) { for (int j=m;j>=1;j--) { C[j] = C[j] + C[j-1]; } } vs1[0] = vs2[0] = 1; for (int i = 1; i <= m; i++) { vs1[i] = vs1[i - 1] * v1; vs1[i] %= mod; vs2[i] = vs2[i - 1] * v2; vs2[i] %= mod; } for (int i = 0; i <= m; i++) { f1[i] = vs1[i] * vs2[m - i]; f1[i] %= mod; } for (int i = 2; i <= n; i++) { for (int j = 0; j<= m; j++) { f2[j] = f1[j] + f1[m - j]; f2[j] %= mod; f2[j] *= C[j]; f2[j] %= mod; } memcpy(f1, f2, sizeof f2); } for (int i = 0; i <= n; i++) { res += f1[i]; res %= mod; } cout << res; return 0; }