题目链接:点击进入
题目
思路
矩阵快速幂模板
代码
// Problem: P3390 【模板】矩阵快速幂
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3390
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<cstring>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,k;
struct matrix
{
int v[110][110];
};
matrix mul(matrix a,matrix b)
{
matrix c;
memset(c.v,0,sizeof(c.v));
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
c.v[i][j]=(c.v[i][j]+a.v[i][k]*b.v[k][j])%mod;
}
}
}
return c;
}
matrix qpow(matrix a,int b)
{
matrix res;
memset(res.v,0,sizeof(res.v));
for(int i=1;i<=n;i++) res.v[i][i]=1;
while(b)
{
if(b&1) res=mul(res,a);
a=mul(a,a);
b=b>>1;
}
return res;
}
signed main( )
{
matrix a;
cin>>n>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a.v[i][j];
matrix ans=qpow(a,k);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<ans.v[i][j]<<' ';
cout<<endl;
}
return 0;
}