RT
我模也模了,输出格式也注意力,怎么还是寄了呢?跪求大佬查错,加关注。
#define ll long long
#include<bits/stdc++.h>
using namespace std;
namespace Morgen{
const int maxn=50;const char ze='0';
const int mod=10;
inline int fr(){
int res=0;char tp=getchar();
while(!isdigit(tp))tp=getchar();
while(isdigit(tp)){
res=(res<<1)+(res<<3)+tp-ze;
tp=getchar();
}
return res;
}
struct martix{
int siz;
int dat[maxn][maxn];
void init(int x){
siz=x;
memset(dat,0,sizeof(dat));
for(int i=1;i<=x;i++)dat[i][i]=1;
}
friend martix operator *(martix tp1,martix tp2){
martix res;res.siz=tp1.siz;
for(int i=1;i<=tp1.siz;i++)
for(int j=1;j<=tp1.siz;j++)
for(int k=1;k<=tp1.siz;k++){
res.dat[i][j]+=tp1.dat[i][k]*tp2.dat[k][j];
res.dat[i][j]%=mod;
}
return res;
}
friend martix operator +(martix tp1,martix tp2){
martix res;res.siz=tp2.siz;
for(int i=1;i<=tp1.siz;i++){
for(int j=1;j<=tp2.siz;j++){
res.dat[i][j]=(tp1.dat[i][j]+tp2.dat[i][j])%mod;
}
}
return res;
}
}mar,ans,unit;
int n,k;
martix ksm(int pow){
martix res=unit;
martix tmp=mar;
while(pow){
if(pow&1)res=res*tmp;
tmp=tmp*tmp;
pow>>=1;
}
return res;
}
martix divc(int pow){
if(pow==1)return mar;
if(pow%2==0){
martix res=divc(pow/2);
return res+res*ksm(pow/2);
}
else{
return divc(pow-1)+ksm(pow);
}
}
bool main(){
n=fr();k=fr();
unit.init(n);
if(!n)return false;
mar.siz=n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mar.dat[i][j]=fr()%mod;
ans=divc(k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%d",ans.dat[i][j]);
if(j!=n)printf(" ");
}
printf("\n");
}
printf("\n");
return true;
}
};
int main(){
while(1)
if(!Morgen::main())break;
return 0;
}