hdu 1575 Tr A 解题报告
这个主要是矩阵2分快速幂
#include<iostream> #include<stdio.h> #include<cmath> using namespace std; struct aa { int a[11][11]; }; aa f(aa m,aa n,int nn) { aa ans; for(int i=0;i<nn;i++) for(int j=0;j<nn;j++) { ans.a[i][j]=0; for(int k=0;k<nn;k++) ans.a[i][j]+=m.a[i][k]*n.a[k][j]; ans.a[i][j]%=9973; } return ans; } int mul(aa m,int n,long k) { aa ans; int i,j; int sum; for(i=0;i<n;i++) for(j=0;j<n;j++) ans.a[i][j]=(i==j); //注意这里单位阵的作用 while(k) { if(k&1) { ans=f(ans,m,n); } k>>=1; m=f(m,m,n); } sum=0; for(i=0;i<n;i++) sum+=ans.a[i][i]; return sum%9973; } int main() { long m; int t,n,i,j; scanf("%d",&t); while(t--) { aa p; scanf("%d%d",&n,&m); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&p.a[i][j]); printf("%d\n",mul(p,n,m)); } return 0; }

浙公网安备 33010602011771号