RT,代码如下
#include <bits/stdc++.h>
#define MAXN 105
using namespace std;
const int MOD=1e9+7;
inline int read(){
char ch=getchar();
int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
return x*f;
}
struct matrix
{
int n,m;
long long a[MAXN][MAXN];
inline matrix(){n=m=0;memset(a,0,sizeof(a));}
inline void init(int n)
{
this->n=n;this->m=n;
for (int i=1;i<=n;i++) a[i][i]=1;
}
inline struct matrix operator * (struct matrix tmp)
{
struct matrix ans;
ans.n=n;ans.m=tmp.m;
for (int i=1;i<=ans.n;i++)
for (int j=1;j<=ans.m;j++)
for (int k=1;k<=tmp.n;k++)
ans.a[i][j]=(ans.a[i][j]+a[i][k]*tmp.a[k][j]%MOD)%MOD;
return ans;
}
} f;
inline struct matrix qpow(struct matrix a,long long b)
{
struct matrix res;res.init(a.n);
while (b)
{
if (b&1) res=res*a;
a=a*a;b>>=1;
}
return res;
}
int main(void) {
long long n,k;
scanf("%lld%lld",&n,&k);
f.init(n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) f.a[i][j]=read();
qpow(f,k);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) printf("%lld ",f.a[i][j]);
}
蒟蒻真的不明白为什么会爆零,谢谢
由于各处搜集模板,除main外均不是本人马蜂……qwq