一道矩阵水题,,,,主要是二分法,,,终于1A了,,,
#include<iostream> #include<cstdio> #include<string.h> #define N 11 #define MOD 9973 using namespace std; typedef struct { int num[N][N]; }Node; Node a,b; int n,k; Node mul(Node x,Node y) { Node c; memset(c.num,0,sizeof(c.num)); for(int i=0;i<n;++i) for(int j=0;j<n;++j) { for(int t=0;t<n;++t) c.num[i][j]=(c.num[i][j]+x.num[i][t]*y.num[t][j])%MOD; } return c; } Node ceil() { Node p=a,q=b; while(k) { if(1&k) p=mul(p,q); q=mul(q,q); k=k>>1; } return p; } int main() { int Case; scanf("%d",&Case); while(Case--) { scanf("%d%d",&n,&k); for(int i=0;i<n;++i) for(int j=0;j<n;++j) scanf("%d",&b.num[i][j]),a.num[i][j]=(i==j); Node c=ceil(); int sum=0; for(int i=0;i<n;++i) sum+=c.num[i][i],sum%=MOD; printf("%d\n",sum); }return 0; }