10分求调
查看原帖
10分求调
1412938
A7F3jK9pR0xf_楼主2024/8/30 23:09
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 110;
const int Mod = 1e9+7;
struct Matrix
{
	int a[N][N], n, m;
	friend Matrix operator * (const Matrix &n1, const Matrix &n2)
	{
		Matrix n3 = (Matrix){{{0}}, n1.n, n2.m};
		for(int k = 1;k <= n2.n;++k)
			for(int i = 1;i <= n1.n;++i)
				for(int j = 1;j <= n2.m;++j)
					n3.a[i][j] = (ll)(n1.a[i][k]) * n2.a[k][j] % Mod;
		return n3;
	}
};
inline Matrix fastpow(Matrix a, ll k)
{
	Matrix ans = (Matrix){{{0}}, a.n, a.m};
	for(int i = 1;i <= ans.n;++i)
	{
		for(int j = 1;j <= ans.m;++j)
		{
			ans.a[i][j] = 1;
			if(k == 0 && i != j)
				ans.a[i][j] = 0;
		}
	}
	while(k)
	{
		if(k & 1)
			ans = ans * a;
		k >>= 1;
		a = a * a;
	}
	return ans;
}
int main()
{
	int n;
	ll k;
	cin >> n >> k;
	Matrix a = (Matrix){{{0}}, n, n};
	for(int i = 1;i <= n;++i)
		for(int j = 1;j <= n;++j)
			scanf("%d", &a.a[i][j]);
	Matrix ans = fastpow(a, k);
	for(int i = 1;i <= n;++i)
	{
		for(int j = 1;j <= n;++j)
			cout << ans.a[i][j] << " ";
		cout << "\n";
	}
	return 0;
}
2024/8/30 23:09
加载中...