题目
luogu3390
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 205;
const ll mod = 1e9 + 7;
ll n, k;
struct node
{
ll mp[N][N];
void clear() {memset(mp, 0, sizeof(mp));}
}x, ans;
node operator * (node a, node b)
{
node t; t.clear();
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++) t.mp[i][j] = (t.mp[i][j] + a.mp[i][k] * b.mp[k][j]) % mod;
return t;
}
void ksm()
{
for(int i = 1; i <= n; i++) ans.mp[i][i] = 1;
while(k)
{
if(k & 1) ans = ans * x;
x = x * x; k >>= 1;
}
}
int main()
{
cin >> n >> k;
x.clear(); ans.clear();
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) cin >> x.mp[i][j];
ksm();
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++) cout << ans.mp[i][j] << " ";
cout << endl;
}
return 0;
}