【模板】矩阵快速幂
2017-07-08 21:55
225 查看
题目描述
给定n*n的矩阵A,求A^k输入输出格式
输入格式:第一行,n,k
第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素
输出格式:
输出A^k
共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7
输入输出样例
输入样例#1:2 1 1 1 1 1
输出样例#1:
1 1 1 1
说明
n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; typedef long long ll; const int N=105,mod=1000000007; int n;ll k; struct mat{ ll a ; inline mat operator *(const mat &b)const{ mat tmp; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { tmp.a[i][j]=0; for(int k=1;k<=n;k++) tmp.a[i][j]+=a[i][k]*b.a[k][j],tmp.a[i][j]%=mod; } return tmp; } }a; mat qm(mat a,ll k){ mat tmp=a;k--; while(k){ if(k&1)tmp=tmp*a; k>>=1;a=a*a; } return tmp; } int main() { scanf("%d%lld",&n,&k); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&a.a[i][j]); a=qm(a,k); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) printf("%lld ",a.a[i][j]); puts(""); } return 0; }
相关文章推荐
- Additions HNUST 1713(矩阵快速幂模板 )
- 快速幂模板(数+矩阵)
- 矩阵快速幂模板
- 矩阵快速幂模板
- P3390 【模板】矩阵快速幂
- 矩阵快速幂模板
- [hdu4965]矩阵快速幂优化 不规则矩阵相乘 模板
- A Simple Math Problem(矩阵快速幂(模板))
- poj-3982(矩阵快速幂+大数模板)
- Additions HNUST 1713(矩阵快速幂模板 )
- lightoj 1096【矩阵快速幂(作为以后的模板)】
- hdu1575 Tr A(矩阵快速幂模板题)
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- hdu 1420 Prepared for New Acmer(矩阵快速幂模板)
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
- Additions HNUST 1713(矩阵快速幂模板 )
- 矩阵乘法以及矩阵快速幂模板
- BZOJ1009 单模板自动机 矩阵快速幂优化DP