0分求助
查看原帖
0分求助
206814
封禁用户楼主2023/1/28 21:20
#include <bits/stdc++.h>
#define int long long
#define MOD (int)(1e9 + 7)
using namespace std;
int n;
struct martix{
    int m[105][105];
    martix(){memset(m, 0, sizeof(m));}
    friend martix operator*(martix a, martix b){
        martix c;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                for(int k = 1; k <= n; k++)
                    c.m[i][j] = (c.m[i][j] + ((a.m[i][k] % MOD) * (b.m[k][j] % MOD)) % MOD) % MOD;
        return c;
    }
};
martix QuickPow(martix a, int k){
    if(k == 0){
        martix c;
        for(int i = 1; i <= n; i++)
            c.m[i][i] = 1;
        return c;
    }
    if(k == 1) return a;
    auto res = QuickPow(a, k / 2);
    if(k % 2 == 0) return res * res;
    else return res * res * a;
}
signed main(){
    int n, k;
    martix ans;
    scanf("%lld %lld", &n, &k);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            scanf("%lld", &ans.m[i][j]);
    ans = QuickPow(ans, k);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++)
            printf("%lld ", ans.m[i][j]);
        putchar('\n');
    }
    return 0;
}
2023/1/28 21:20
加载中...