HDU 1575 Tr A (矩阵快速幂)
2016-04-05 17:34
441 查看
大意:求出矩阵的对角线元素的和。
思路:裸的巨快,最后循环求和。
思路:裸的巨快,最后循环求和。
#include<map> #include<queue> #include<cmath> #include<cstdio> #include<stack> #include<iostream> #include<cstring> #include<algorithm> #define LL int #define inf 0x3f3f3f3f #define eps 1e-8 #include<vector> #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 int n ; const int mod = 9973; struct node{ int r[15][15]; }q; void matrix_pow(node &a,node &b){ int i,j,k; node t; memset(t.r,0,sizeof(t.r)); for(k = 0;k < n;++ k){ for(i =0 ;i < n;i++){ for(j = 0;j < n;++ j){ t.r[i][j] = (t.r[i][j]+ (a.r[i][k]*b.r[k][j]))%mod; } } } a = t; } node so(node &q,int m){ int i,j,k; node tmp; memset(tmp.r,0,sizeof(tmp.r)); for(i=0;i<n;++i) tmp.r[i][i]=1; while(m){ if(m&1){ matrix_pow(tmp,q); } matrix_pow(q,q); m =m >> 1; } q = tmp; } int main(){ int k,i,j,cla; scanf("%d",&cla); while(cla--){ scanf("%d%d",&n,&k); memset(q.r,0,sizeof(q.r)); for(i = 0;i < n; ++ i) for(j = 0;j < n ;++ j) scanf("%d",&q.r[i][j]); so(q,k); __int64 ans = 0; for(i = 0;i < n;++ i){ ans = (ans+q.r[i][i])%mod; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- HDU 1005 Number Sequence
- hdu1757 矩阵快速幂--
- HDU 4979 A simple math problem.
- HDU 1575 Tr A
- HDU 2604 Queuing
- poj_3070 Fibonacci
- 矩阵快速幂求斐波那契数列 poj3070
- hihocoder骨牌覆盖问题·三
- HDU 5318 The Goddess Of The Moon
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- 矩阵的运算 --- 倍增法(UVA11149 - Power of Matrix)
- 例题2.23 细胞自动机 LA3740
- HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
- POJ 3070 Fibonacci
- HDU 5171 GTY's birthday gift
- hdu 5564 && bestcode 62 Clarke and digits
- 矩阵快速幂
- 矩阵快速幂求解任意初始值f1,f2及a,b的斐波那契数列
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- bnu新生赛D 柯南的精灵(矩阵快速幂)