Tr A(矩阵乘法快速幂)
2016-08-11 15:02
323 查看
Tr A
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
#include<iostream> #include<cstring> using namespace std; const int maxn=11; struct node { int map[maxn][maxn]; }; node A,B; int t,n,k; node power(node a,node b) { node c; memset(c.map,0,sizeof(c)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) { c.map[i][j]+=a.map[i][k]*b.map[k][j]; c.map[i][j]%=9973; } return c; } node f(node s,int k) { memset(s.map,0,sizeof(s)); for(int i=1;i<=n;i++) s.map[i][i]=1; while(k) { if(k&1) s=power(s,A); A=power(A,A); k>>=1; } return 4000 s; } int main() { cin>>t; while(t--) { cin>>n>>k; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>A.map[i][j]; B=f(A,k); int ans=0; for(int i=1;i<=n;i++) { ans+=B.map[i][i]; ans%=9973; } cout<<ans<<endl; } return 0; }
相关文章推荐
- poj3070(矩阵快速幂,矩阵乘法)
- 矩阵快速乘法---代码
- 快速乘法&快速幂&矩阵快速幂简单讲解
- [HDU](1575)Tr A ---矩阵快速幂
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- 【HDU - 1575】 Tr A 【矩阵快速幂】
- 【bzoj】3329: Xorequ 【DP】【快速幂&&矩阵乘法】
- 整数快速乘法/快速幂+矩阵快速幂
- 矩阵快速乘法---代码
- 【矩阵乘法+快速乘】BZOJ2875-[NOI2012]随机数生成器
- hdu 2604 Queuing(矩阵快速幂乘法)
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- poj 3070 Fibonacci(矩阵乘法快速幂)
- POJ 3233 快速矩阵乘法
- 矩阵的乘法和矩阵快速幂
- HDU 1575 Tr A (矩阵快速幂)
- 一个简单的矩阵乘法(快速幂)
- hdu 5607 graph (矩阵乘法快速幂)