0分求助
查看原帖
0分求助
999274
CNS_5t0_0r2楼主2023/8/8 19:31
#include<bits/stdc++.h>
const int N = 109,MOD = 1e9 + 7;
using namespace std;
int n;
long long k;
struct matrix{
	int A[N][N];
	matrix(){
		for(int i = 1;i <= n;i++)
			A[i][i] = 1;
	}
	void print(){
		for(int i = 1;i <= n;i++){
			for(int j = 1;j <= n;j++)
				printf("%d ",A[i][j]);
			printf("\n");
		}
	}
} a;
matrix operator *(matrix a,matrix b){
	matrix c;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			int tmp = 0;
			for(int k = 1;k <= n;k++){
				tmp += a.A[i][k] % MOD * b.A[k][j] % MOD;
				tmp %= MOD;
			}
			c.A[i][j] = tmp % MOD;
		}
	}
	return c;
}
matrix quick_pow(matrix x,long long y){
	matrix ans;
	while(y){
		if(y & 1)
			ans = ans * x;
		x = x * x;
		y >>= 1;
	}
	return ans;
}
int main(){
	scanf("%d%lld" ,&n, &k);
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++)
			scanf("%d", &a.A[i][j]);
	matrix ans;
	if(k == 0){
		ans.print();
	}
	else{
		ans = quick_pow(a,k);
		ans.print();
	}
	return 0;
}
2023/8/8 19:31
加载中...