样例过了 有格式输出 之前幂的时候
c.ma[i][j] = mod(mod(c.ma[i][j]) + mod(a.ma[i][k] * b.ma[k][j]));
也不行
#include <bits/stdc++.h>
#define mod(a) (a) % modn
using namespace std;
typedef long long ll;
const int modn = 10;
const int N = 40+5;
struct matrix{
ll ma[N][N];
inline matrix(){
memset(ma, 0, sizeof(ma));
}
};
inline matrix operator*(const matrix& a, const matrix& b){
matrix c;
for (short i=0; i<N; i++){
for (short j=0; j<N; j++){
for (short k=0; k<N; k++){
c.ma[i][j] = c.ma[i][j] + a.ma[i][k] * b.ma[k][j];
}
}
}
return c;
}
inline matrix operator+(const matrix& a, const matrix& b){
matrix c;
for (short i=0; i<N; i++){
for (short j=0; j<N; j++){
c.ma[i][j] = a.ma[i][j] + b.ma[i][j];
}
}
return c;
}
inline matrix Ein(){
matrix e;
for (short i=0; i<N; i++){
e.ma[i][i] = 1;
}
return e;
}
inline void printMatrix(matrix ma, short n){
for (short i=0; i<n; i++){
for (short j=0; j<n; j++){
if (j!=0) printf(" ");
printf("%d", mod(ma.ma[i][j]));
}
printf("\n");
}
}
inline matrix fastPower(matrix a, int k){
matrix m = Ein();
while(k){
if(k&1) m = m * a;
a = a * a;
k >>= 1;
}
return m;
}
inline matrix getFromInput(short n){
matrix a;
for (short i=0; i<n; i++){
for (short j=0; j<n; j++){
int e;
scanf("%d", &e);
a.ma[i][j] = e;
}
}
return a;
}
inline matrix sigmaMatrixPower(matrix a, int k){
matrix S[2][2];
int l = 2;
S[0][0] = S[1][0] = a;
S[0][1] = matrix();
S[1][1] = Ein();
matrix m[2][2];
m[0][0] = m[1][1] = Ein();
while(k){
if(k&1){
matrix a[2][2];
// m = m * S
a[0][0] = m[0][0] * S[0][0] + m[0][1] * S[1][0];
a[0][1] = m[0][0] * S[0][1] + m[0][1] * S[1][1];
a[1][0] = m[1][0] * S[0][0] + m[1][1] * S[1][0];
a[1][1] = m[1][0] * S[0][1] + m[1][1] * S[1][1];
swap(m, a);
}
matrix a[2][2];
// S = S * S
a[0][0] = S[0][0] * S[0][0] + S[0][1] * S[1][0];
a[0][1] = S[0][0] * S[0][1] + S[0][1] * S[1][1];
a[1][0] = S[1][0] * S[0][0] + S[1][1] * S[1][0];
a[1][1] = S[1][0] * S[0][1] + S[1][1] * S[1][1];
swap(S, a);
k >>= 1;
}
return S[1][0];
}
void calc(int n, int k){
matrix m = getFromInput(n);
matrix s = sigmaMatrixPower(m, k);
printMatrix(s, n);
}
int main(){
int n, k;
while (true){
scanf("%d %d", &n, &k);
if (n==0) break;
calc(n, k);
printf(" \n");
}
return 0;
}