0分求助
查看原帖
0分求助
857323
linxuanrui楼主2023/2/19 21:04
#pragma GCC optmize(2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
#define abs(a) ((a) > 0 ? (a) : 0 - (a))
#define in(a,b,c) ((a) >= (b) && (a) <= (c))
#define isint(a) (floor(a) == a)
#define endl '\n'
using namespace std;
#define N 101
#define mod 1000000007
int n,k;
struct box {
	int a[N][N];
	void init() {
		for(int i = 1; i <= n; i++) {
			a[i][i] = 1;
		}
	}
};
box operator *(box x,box y) {
	box c;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= n; j++) {
			for(int k = 1; k <= n; k++) {
				c.a[i][j] = (c.a[i][j] + x.a[i][k] * y.a[k][j] % mod) % mod;
			}
		}
	}
	return c;
}
box operator ^(box x,int k) {
	box ans;
	ans.init();
	while(k) {
		if(k & 1)ans = ans * x;
		x = x * x,k >>= 1;
	}
	return ans;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> k;
	box x;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= n; j++) {
			cin >> x.a[i][j];
		}
	}
	box y = x ^ k;
	for(int i = 1; i <= n; cout << endl,i++) {
		for(int j = 1; j <= n; j++) {
			cout << y.a[i][j] << " ";
		}
	}
}
2023/2/19 21:04
加载中...