HDU1575(矩阵快速幂模板题)
2017-10-11 20:57
357 查看
简单的矩阵快速幂,输入矩阵直接套模板做就行了。
code
code
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<string> #include <set> #include<time.h> //a&3==a%4 using namespace std ; #define ll long long #define mem(a) memset(a,0,sizeof(a)) const double eps = 1e-8; const int maxn = 110010; const int inf = 0x3f3f3f3f; const ll mod=9973ll; struct matrix { ll mat[10][10];//mat[i][j]=µÚiÐеÚjÁÐ matrix() { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { mat[i][j]=0ll; } } } }; void out(matrix a,int n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cout<<a.mat[i][j]<<" "; } cout<<endl; } } matrix multiply(matrix a,matrix b,int n) { matrix res; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { for(int k=0;k<n;k++) { res.mat[i][j]+=a.mat[i][k]*b.mat[k][j]%mod; res.mat[i][j]%=mod; } } } r be80 eturn res; } matrix quickmi(matrix a,ll b,int n) { matrix E; matrix res; for(int i=0;i<n;i++) { E.mat[i][i]=1; res.mat[i][i]=1; } E=multiply(a,E,n); while(b>0) { if(b%2==1) { res=multiply(res,E,n); } b=b/2; E=multiply(E,E,n); } return res; } int main() {; int _case; scanf("%d",&_case); while(_case--) { int n; ll k; matrix sum; scanf("%d",&n); cin>>k; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { ll a; cin>>a; sum.mat[i][j]=a; } } matrix res=quickmi(sum,k,n); ll sumres=0; for(int i=0;i<n;i++) { sumres=(sumres+res.mat[i][i])%mod; } cout<<sumres%mod<<endl; } return 0; }
相关文章推荐
- HDU1575:Tr A(矩阵快速幂模板题)
- HDU1575--Tr A(矩阵快速幂模板)
- hdu1575 Tr A(矩阵快速幂模板题)
- ACM 矩阵乘法模板(T_T)+快速幂
- poj3070Fibonacci(矩阵快速幂模板)
- [hdu4965]矩阵快速幂优化 不规则矩阵相乘 模板
- 矩阵快速幂模板
- 【模板】矩阵快速幂
- 矩阵快速幂模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 模板——矩阵快速幂
- POJ 3070 Fibonacci【矩阵快速幂取模】【模板题】
- P3390 【模板】矩阵快速幂
- 深夜敲模板_1——快速幂 && 矩阵的快速幂
- 【模板】矩阵快速幂
- 个人模板 快速幂取模,矩阵快速幂,快速乘
- poj-3982(矩阵快速幂+大数模板)
- 矩阵快速幂模板