```c
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 1001
using namespace std;
typedef long long ll;
ll w;
int k;
const ll p=1000000007LL;
struct node
{
ll g[N][N];
}f,ans;
void mul(node &x,node &y,node &z);//矩阵乘法
void mul_one(node &x);
void fast_pow(int k);
int main()
{
cin>>w>>k;
for(int i=1;i<=w;i++)
for(int j=1;j<=w;j++)
cin>>f.g[i][j];
fast_pow(k);
for(int i=1;i<=w;i++)
for(int j=1;j<=w;j++)
cout<<ans.g[i][j]<<endl;
return 0;
}
void fast_pow(int k)//k表示k次幂
{
node t,tmp=f;
mul_one(ans);
while(k)
{
if(k&1)
{
mul(ans,tmp,t);
ans=t;
}
mul(tmp,tmp,t); tmp=t;
k>>=1;
}
return ;
}
void mul_one(node &x)
{
for(int i=1;i<=w;i++)
for(int j=1;j<=w;j++)
{
if(i==j)
x.g[i][j]=1LL;
else
x.g[i][j]=0LL;
}
return ;
}
void mul(node &x,node &y,node &z)//矩阵乘法
{
memset(z.g,0,sizeof(z.g));//z数组记得清零
for(int i=1;i<=w;i++)
for(int j=1;j<=w;j++)
for(int k=1;k<=w;k++)
z.g[i][j]+=(x.g[i][k]*y.g[k][j])%p;
return ;
}
```
by 太过年轻ya @ 2018-07-17 19:21:20
@管理
by 太过年轻ya @ 2018-07-17 19:35:43
数组可以开大点,把引用放到主函数试试
by fly20040720 @ 2018-07-17 19:38:26
@[Ho0eDdzVW7](/space/show?uid=27950)
什么叫引用放到主函数?
by 太过年轻ya @ 2018-07-17 19:47:48
你的程序崩了,
了解?
PS: 从第一行开始下断点,F7,在崩溃那一句注意有没有越界、爆栈的问题
by username_invalid @ 2018-07-17 19:57:25
@[Chenye_Jin](/space/show?uid=33405) 对啊,可是我感觉没爆啊,但是一进这个函数程序就退出了
by 太过年轻ya @ 2018-07-17 20:12:11
它是怎么爆掉的,求解原理啊
by 太过年轻ya @ 2018-07-18 09:52:14