矩阵快速幂
2015-06-21 16:08
549 查看
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113
这个题因为m比较大,所以不能递归求解,需要换成循环的形式.
这个题因为m比较大,所以不能递归求解,需要换成循环的形式.
#include <cstdio> typedef long long ll; const int mod = 1e9+7; struct Mat { ll matrix[100][100]; }; int n,m; Mat mul(Mat a,Mat b) { Mat c; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { c.matrix[i][j]=0; for(int k=0;k<n;k++) { c.matrix[i][j]+=(a.matrix[i][k]*b.matrix[k][j])%mod; } c.matrix[i][j]%=mod; } return c; } Mat mat; Mat solve(int m) { Mat mt=mat; m--; while(m) { if(m&1) { mt=mul(mat,mt); m--; } mat=mul(mat,mat); m/=2; } return mt; } int main() { //freopen("a.txt","r",stdin); int x; Mat a,b,c; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { scanf("%d",&x); a.matrix[i][j]=x; } mat=a; /*for(int i=0;i<n;i++) { for(int j=0;j<n;j++) printf("%d ",mt.matrix[i][j]); printf("\n"); }*/ c=solve(m); for(int i=0;i<n;i++) { for(int j=0;j<n-1;j++) printf("%lld ",c.matrix[i][j]); printf("%lld\n",c.matrix[i][n-1]); } return 0; }
相关文章推荐
- 几个常用的正则表达式
- Effective C++条款22解读: 将成员变量生命为private
- C++的try_catch异常
- YT04-贪心课堂练习-1005—Wooden Sticks-(6.14日-烟台大学ACM预备队解题报告)
- ubuntu开启root用户登录
- [Poj 3268][Usaco2007 Feb]Cow Party奶牛派对
- 复合主键
- Matlab计算两集合间的海明距离
- C#常用网址
- 内部硬盘的硬件结构和工作原理进行了详细解释
- 黑马程序员——网络编程小总结
- leetCode(17):Minimum/Maximize depth of binary tree
- leetCode(17):Minimum/Maximize depth of binary tree 分类: leetCode 2015-06-21 16:05 146人阅读 评论(0) 收藏
- bottle框架学习(七)之session的使用
- Mac下Git清除之前保存的密码
- #10 Regular Expression Match
- Balanced Binary Tree 算法详解
- YT04-贪心课堂练习-1004—Fire Net-(6.14日-烟台大学ACM预备队解题报告)
- Virtualox虚拟机使用特点
- js深入浅出(大纲)