板子题.
打完区域赛回来心血来潮敲一波板子。瞬间被教做人T-T。。
取模加错位置了。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
ll mod=1e9+7;
struct node{
ll a[N][N];
void init()
{
for(int i=1;i<N;i++)
{
for(int j=1;j<N;j++)
a[i][j]=0;
}
}
} ;
int n,m;
node mul(node x,node y)
{
node res;
res.init();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
res.a[i][j]+=x.a[i][k] * y.a[k][j];
res.a[i][j]%=mod;
}
}
}
return res;
}
node _quick( node base, int m)
{
node res;
res.init();
for(int i=1;i<=n;i++)
{
res.a[i][i]=1;
}
while(m){
if(m&1)
res=mul(base,res);
base=mul(base,base);
m/=2;
}
return res;
}
int main()
{
scanf("%d%d",&n,&m);
node base;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%lld",&base.a[i][j]);
}
node ans=_quick(base,m);
for(int i=1;i<=n;i++)
{
printf("%lld",ans.a[i][1]);
for(int j=2;j<=n;j++)
{
printf(" %lld",ans.a[i][j]);
}
printf("\n");
}
}