完全自己打的(没有用任何高级玩意),10pts其他TLE,求调
#include<bits/stdc++.h>
using namespace std;
const long long N=105;
long long n,k;
struct matrix{
long long m[N][N];
}a;
matrix Multiplication(matrix x,matrix y){
matrix z;
memset(z.m,0,sizeof z.m);
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++){
for(long long p=1;p<=n;p++){
z.m[i][j]+=x.m[i][p]*y.m[p][j]%1000000007;
z.m[i][j]%=1000000007;
}
}
}
return z;
}
matrix MatrixFastPower(matrix arr,long long p){
if(p==1)return arr;
if(p%2==1){
matrix res=Multiplication(MatrixFastPower(arr,p/2),MatrixFastPower(arr,p/2));
res=Multiplication(res,arr);
return res;
}
else{
matrix res=Multiplication(MatrixFastPower(arr,p/2),MatrixFastPower(arr,p/2));
return res;
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>k;
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++){
cin>>a.m[i][j];
}
}
if(k==0){
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++){
if(i==j)cout<<1<<' ';
else cout<<0<<' ';
}
cout<<endl;
}
return 0;
}
matrix ans=MatrixFastPower(a,k);
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++){
cout<<ans.m[i][j]<<' ';
}
cout<<endl;
}
return 0;
}