【矩阵】备用模板
来源:互联网 发布:js onclick function 编辑:程序博客网 时间:2024/05/24 15:40
来自学长的矩阵模板
#include <cstdio>struct Mat {int N,M;int m[15][15];};// 有时由于内存的关系无需用结构体,直接定义多组数组即可 Mat MatMul(Mat A,Mat B,int MOD) { //两个相等矩阵的乘法,对于稀疏矩阵,有0处不用运算的优化Mat tmp;tmp.N=A.N;tmp.M=B.M;for(int i=0; i<A.N; i++) {for(int j=0; j<B.M; j++) {int sum=0;for(int k=0; k<B.N; k++)sum=(sum+A.m[i][k]*B.m[k][j])%MOD;tmp.m[i][j]=sum;}}/* for(int i = 0; i < N; i++) { for(int j = 0; j < m; j++) { c[i][j] = 0; } } for(int i = 0; i < N; i++) { for(int k = 0; k < M; k++) { if(a[i][k] == 0) continue; for(int j = 0; j < m; j++) { c[i][j] += a[i][k] * b[k][j]; } } }*/return tmp;}Mat MatPow(Mat mat,int n,int MOD) { //二分快速幂Mat ans;ans.N=ans.M=mat.N;for(int i=0; i<ans.N; i++)ans.m[i][i]=1;while(n) {if(n&1)ans=MatMul(ans,mat,MOD);mat=MatMul(mat,mat,MOD);n>>=1;}return ans;}int main() {Mat a,b;int n,m;scanf("%d %d",&n,&m);a.N=n;a.M=m;for(int i=0; i<n; i++)for(int j=0; j<m; j++) {scanf("%d",&a.m[i][j]);}scanf("%d %d",&n,&m);b.N=n;b.M=m;for(int i=0; i<n; i++)for(int j=0; j<m; j++)scanf("%d",&b.m[i][j]);Mat res;res=MatMul(a,b,10000000);for(int i=0; i<res.N; i++) {for(int j=0; j<res.M; j++) {printf("%d%c",res.m[i][j],j==res.M-1?'\n':' ');}}return 0;}
阅读全文
0 0
- 【矩阵】备用模板
- 【线段树】备用模板
- 二叉堆模板(备用)
- 矩阵模板
- 矩阵模板
- 矩阵模板
- 【矩阵模板】
- 矩阵模板
- 备用
- 备用
- 备用
- 备用
- 备用
- 备用
- 备用
- 备用
- 备用
- 备用
- 分段机制小结
- 任务布置之web框架
- HDU1166敌兵布阵(线段树,树状数组)
- HDU-4678 Mine(BFS,NIM博弈,SG函数)
- 可视化算法-开端
- 【矩阵】备用模板
- Merge Two Sorted Lists leetcode java
- linux gcc 静态编译和动态编译
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- tarjan算法求连通分量+缩点后重新建图
- poj 1787 Charlie's Change【多重背包可行性+记录路径】
- 机器学习
- HDOJ1874 畅通工程续 (Dijkstra)
- HTTP,TCP,UDP,Socket,WebSocket