矩阵快速幂(裸,模板)
来源:互联网 发布:淘宝蒙娜丽莎十字绣 编辑:程序博客网 时间:2024/05/16 01:20
题目来源:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1137
【题意】
中文题意不在叙述,只是让求一个矩阵的乘法而已。
【思路】
终于可以做矩阵快速幂的题了,这个专题一直被我拖到现在,作为一个弱弱内心无比难受,终于可以把它学了,十分开心。
此题非常裸,直接重载一个乘号运算符就可以了,只不过矩阵乘法要知道怎么回事。不知道的可以看下这位大佬的博客,知道的也就可以看下,加深理解:矩阵乘法
并且初始矩阵这个概念也要知道,这些可以看下大佬的矩阵快速幂视频
【代码】
#include<set>#include<map>#include<stack>#include<cmath>#include<queue>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<limits.h>#include<algorithm>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;const int mod=1e9+7;typedef unsigned long long ll;typedef long long LL;const int N=100+10;LL n,m;struct mat{ LL a[N][N];};mat operator*(mat s,mat t){ mat r; LL x; mem(r.a,0); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { x=0; for(int k=1; k<=n; k++) x+=(s.a[i][k]*t.a[k][j])%mod; r.a[i][j]=x%mod; } return r;}void init(mat& s){ for(int i=1; i<=n; i++) s.a[i][i]=1;}mat pow_quick(mat r){ mat ans; init(ans); while(m) { if(m&1) ans=ans*r; r=r*r; m>>=1; } return ans;}int main(){ mat t; scanf("%lld%lld",&n,&m); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%lld",&t.a[i][j]); t=pow_quick(t); for(int i=1; i<=n; i++) { printf("%lld",t.a[i][1]); for(int j=2; j<=n; j++) printf(" %lld",t.a[i][j]); printf("\n"); }}
阅读全文
0 0
- 矩阵快速幂(裸,模板)
- 矩阵快速幂(模板)
- 矩阵快速幂 (模板)
- 快速矩阵幂(模板)
- 快速幂,矩阵快速幂(模板)
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- spring swagge2配置
- 数据挖掘技术(一)——预处理
- CSS中关于字体样式p标签的属性
- java验证码的实现
- [IOS APP]婷婷诗教-有声系列
- 矩阵快速幂(裸,模板)
- android文件选择器
- 菜鸟Tablayout显示导航栏
- Spark Guides
- jdbc事务处理
- Spring AOP详解
- mui 头部tab代码
- qt中初始化QWidget大小
- BZOJ4899: 记忆的轮廓 期望DP 决策单调性