洛谷3390 矩阵快速幂
来源:互联网 发布:java socket心跳检测 编辑:程序博客网 时间:2024/05/17 08:48
题目背景
矩阵快速幂
题目描述
给定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 算法:矩阵快速幂
Q
淼
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;ll n,m;const ll mod=1e9+7;struct hh{ ll ma[141][141];}a,rec;hh Mar(hh a,hh b){ hh t; memset(t.ma,0,sizeof(t.ma)); for(ll i=1;i<=n;i++) for(ll j=1;j<=n;j++) for(ll k=1;k<=n;k++) t.ma[i][j]=(t.ma[i][j]%mod+((a.ma[i][k]%mod)*(b.ma[k][j]%mod))%mod)%mod; return t;}hh ksm(hh a,ll s){ hh b=a; while(s) { if(s&1) rec=Mar(rec,b); b=Mar(b,b); s>>=1; } return rec;}void solve(){ cin>>n>>m; for(ll i=1;i<=n;i++) for(ll j=1;j<=n;j++) scanf("%lld",&a.ma[i][j]); rec=a; ksm(a,m-1);//已经将rec初始化为a,相当于已经计算了一次,所以这里求a^m-1; for(ll i=1;i<=n;i++) { for(ll j=1;j<=n;j++) printf("%lld ",rec.ma[i][j]); printf("\n"); }}int main(){ solve(); return 0;}
阅读全文
1 0
- 洛谷 3390 矩阵快速幂
- 洛谷3390 矩阵快速幂
- 洛谷3390 矩阵快速幂
- 快速矩阵快速幂
- 洛谷 P3390 矩阵快速幂
- 矩阵快速幂 洛谷P3390
- 矩阵快速幂 洛谷p3390
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- NOIP2011提高组-Mayan游戏
- 遍历Map的四种方式
- 算法题-大数相乘问题
- js追加元素
- 浅谈安卓系统内存运行机制
- 洛谷3390 矩阵快速幂
- 深入分析IntHashMap
- cf刷水题一周记录
- logstash-input-jdbc实现mysql 与elasticsearch实时同步
- 再起航,我的学习笔记之JavaScript设计模式15(组合模式)
- oracle常用函数总结
- CSS3 动画属性
- 坑之 Jpa 执行原生SQL 返回映射为对象
- 动画系列之属性动画