杭电1575 Tr A(矩阵快速幂)
2014-10-21 22:33
363 查看
Tr A
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2967 Accepted Submission(s): 2209
Problem Description
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。
Input
数据的第一行是一个T,表示有T组数据。
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
Output
对应每组数据,输出Tr(A^k)%9973。
Sample Input
2 2 2 1 0 0 1 3 99999999 1 2 3 4 5 6 7 8 9
Sample Output
2 2686[code]/* 矩阵快速幂,经矩阵典题目第二题和快速幂差不多 加油!!! Time:2014-10-21 22:32 */ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define mod 9973 struct Matrix{ int a[11][11]; }ans,ori; int n; Matrix mul(Matrix x,Matrix y){ Matrix tmp; memset(tmp.a,0,sizeof(tmp.a)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++){ tmp.a[i][j]+=(x.a[i][k]*y.a[k][j])%mod; tmp.a[i][j]%=mod; } return tmp; } void matrix_power(int k){ memset(ans.a,0,sizeof(ans)); for(int i=1;i<=n;i++) ans.a[i][i]=1; while(k>0){ if(k&1) ans=mul(ans,ori); ori=mul(ori,ori); k>>=1; } } int main(){ int T; int k; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); memset(ori.a,0,sizeof(ori)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&ori.a[i][j]); matrix_power(k); int sum=0; for(int i=1;i<=n;i++){ sum+=ans.a[i][i]%mod; } printf("%d\n",sum%mod); } return 0; }
[/code]
相关文章推荐
- 杭电1575-Tr A(矩阵快速幂)
- 杭电1575(矩阵快速幂)Tr A
- HDU 1575 Tr A(矩阵快速幂)
- HDU (1575)Tr A ---矩阵快速幂
- hdoj 1575 Tr A 矩阵快速幂
- hdu 1575 Tr A(矩阵快速幂)
- HDOJ 1575 Tr A 矩阵快速幂
- hdu 1575 Tr A(矩阵快速幂,简单)
- 【HDU 1575 Tr A】+ 矩阵快速幂
- HDU 1575 Tr A【矩阵快速幂取模】
- HDU 1575 Tr A 矩阵快速幂
- HDU 1575 Tr A(矩阵快速幂 水 入门)
- hdu 1575-Tr A(矩阵快速幂)
- 九度OJ 1443/HDU 1575 Tr A(矩阵快速幂)
- HDU 1575 Tr A——矩阵快速幂
- hdu 1575 Tr A(裸的矩阵快速幂)
- hdoj 1575 Tr A (矩阵快速幂)
- HDU 1575 Tr A(矩阵快速幂)
- hdoj 1575 Tr A 【矩阵快速幂】
- HDU 1575 Tr A 矩阵快速幂