hdu 1575 Tr A(矩阵快速幂,简单)
和 LightOj 1096 - nth Term 类似的线构造一个符合题意的矩阵乘法模版,然后套快速幂的模版,具体的构造矩阵我就不作图了,看着代码也能理解吧
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int num,mod=9973; struct matrix { int a[12][12]; }origin,answ; matrix multiply(matrix x,matrix y)//矩阵乘法 { matrix temp; for(int i=0;i<num;i++) { for(int j=0;j<num;j++) { int ans=0; for(int k=0;k<num;k++) { ans+=((x.a[i][k]*y.a[k][j])%mod); } temp.a[i][j]=ans%mod; } } return temp; } matrix calc(int n)//矩阵快速幂——answ*origin^n { while(n) { if(n%2==1) answ=multiply(origin,answ); origin=multiply(origin,origin); n/=2; } return answ; } int main() { int k,t,a,b,n; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); num=n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&origin.a[i][j]); } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) answ.a[i][j]=(i==j); answ=calc(k); int ans=0; for(int i=0;i<n;i++) ans+=answ.a[i][i]; printf("%d\n",ans%mod); } return 0; }
一道又一道,好高兴!