今天一上午一下午就干了点这,就写了一个这样恶心的模板,,写出来我自己都不想看,,不过还好,可以用。。这个模板可以求n维矩阵的二分幂,主要适用于递推式求值的题目。。

代码:

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
typedef long long ll;
const ll MAX=1000007;
const int row=3;//矩阵的维数,根据题目要求改变
ll aa[11][11],bb[11][11];//aa,bb存储矩阵
ll cc[11][11];//结果矩阵
ll dd[11][11];//单位矩阵
ll mi;//多少次方
class matrix{
public:void input(ll f[11],ll num[11]);void initmatrix(ll p[11],ll q[11]);void matrixmi(int x);//矩阵幂void matrixfun(ll a[11][11],ll b[11][11]);//矩阵乘积
};
void matrix::input(ll f[11],ll num[11]){//输入前几项for(int i=1;i<row;++i){scanf("%lld",&f[i]);}//输入前几项对应的系数for(int i=1;i<=row;++i){scanf("%lld",&num[i]);}//输入所求的n次方scanf("%lld",&mi);
}
//构造矩阵
void matrix::initmatrix(ll ff[11],ll a[11]){memset(aa,0,sizeof(aa));memset(bb,0,sizeof(bb));//构造单位矩阵for(int i=1;i<=row;++i){for(int j=1;j<=row;++j)dd[i][j]=0;dd[i][i]=1;}for(int i=1;i<row;++i)aa[1][i]=ff[i];aa[1][row]=a[row];//原矩阵for(int i=1;i<=row-2;++i)bb[i+1][i]=1;bb[row][row]=1;bb[row][row-1]=1;for(int i=1;i<row;++i)bb[i][row-1]=a[i];//构造所要乘的矩阵
}
//矩阵乘法
void matrix::matrixfun(ll a[11][11],ll b[11][11]){long long sum=0;memset(cc,0,sizeof(cc));for(int i=1;i<=row;++i){for(int j=1;j<=row;++j){sum=0;for(int k=1;k<=row;++k)sum+=(a[i][k]*b[k][j]);cc[i][j]=(sum%MAX);}}
}
//矩阵二分幂
void matrix::matrixmi(int x){while(x){if(x&1){matrixfun(dd,bb);for(int i=1;i<=row;++i)for(int j=1;j<=row;++j)dd[i][j]=cc[i][j];}matrixfun(bb,bb);for(int i=1;i<=row;++i)for(int j=1;j<=row;++j)bb[i][j]=cc[i][j];x=x>>1;}matrixfun(aa,dd);
}
int main(){int numcase;scanf("%d",&numcase);while(numcase--){matrix mm;ll f[11],num[11];mm.input(f,num);if(mi<row){cc[1][row-1]=f[mi]%MAX;}else{mm.initmatrix(f,num);mm.matrixmi(mi-2);}if(cc[1][row-1]>0)printf("%lld\n",cc[1][row-1]);elseprintf("%lld\n",cc[1][row-1]+MAX);}return 0;
}

转载于:https://www.cnblogs.com/javaspring/archive/2012/03/23/2656393.html

模板 n维矩阵的二分幂相关推荐

  1. leetcode74. 搜索二维矩阵(二分查找)

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  2. leetcode 74. 搜索二维矩阵(二分)

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:matrix = ...

  3. LeetCode 74. 搜索二维矩阵(二分查找)

    1. 题目 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: m ...

  4. NOJI 148 fibonacci数列(二) 矩阵乘法二分幂

    第一次这样写以为不对的,自己撮合的着写的没想到对了,太激动了~.~ 点击打开链接 #include <stdio.h> #include <string.h> #include ...

  5. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)

    文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...

  6. 二分幂,快速幂,矩阵快速幂,快速乘

    前言 二分幂,快速幂,矩阵快速幂在算大指数次方时是很高效的. 求 a^n 的值是多少?n是1到10^18次方的一个整数. 求一个数的n次方,朴素的算法就是直接for循环,一遍一遍的乘,a*a*a*a* ...

  7. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

  8. LeetCode 73矩阵置零74搜素二维矩阵75颜色分类

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

  9. leetcode刷题 74.搜索二维矩阵

    题目分析 这是一道简单的查找二维矩阵的题目,所以解决这题有一个最简单的解法就是遍历二维数组即可:但是我们应该注意到题目中的每行整数从左到右是按升序排列的,第一个整数大于前一行的最后一个整数,介于此,我 ...

  10. 判断N维矩阵是否是Monge矩阵的Java实现

    Monge阵列的概念 在一个m*n的矩阵中,任意选中两行两列,其交叉点的4个元素会构成一个二维矩阵,并且在该矩阵中:(左上+右下)<=(左下+右上).满足这样条件的矩阵称为"Monge ...

最新文章

  1. 18-flutter的Future和FutureBuilder
  2. nodejs npm install -g 全局安装和非全局安装的区别
  3. python学习有哪些方向可以选择_学习Python后都有哪些发展方向?
  4. 重构战略到执行的绩效管理体系
  5. 运维常说的 5个9、4个9、3个9 的可靠性,到底是什么???
  6. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
  7. 欣赏多彩的计算机作品教案,五年级上信息技术教案-欣赏多彩的计算机作品长春版(三起).docx...
  8. 回顾 | 使用Visual Studio Code进行端到端应用程序开发
  9. php url标准化,seo优化教程:链接url标准化操作?
  10. C#~异步编程再续~你必须要知道的ThreadPool里的throw
  11. HDU 1004 Let the Balloon Rise (map)
  12. IT项目角色标准定义
  13. VALSE学习(十):图像去模糊-image deblurring
  14. 发送文件夹不存在或被删除
  15. 交通标志牌的检测与识别
  16. DBA日-周-月工作职责
  17. 红外测温仪校准-完整指南
  18. WINRAR -- CRC校验失败,文件被破坏
  19. 填埋场渗滤液处理工艺
  20. Play with Neutron IPv6 (by quqi99)

热门文章

  1. linux系统调用和库函数调用
  2. IDENTITY_INSERT 设置为 OFF
  3. VMware ESX的性能如何与Hyper-V的价格进行竞争?
  4. ES常用DSL语句(kibana常用语句)
  5. python怎么用for循环找出最大值_从“for in”循环中获取最小值和最大值
  6. request用法_urllib的基本用法
  7. php mysql 用户修改_PHP+MYSQL实现用户的增删改查,mysql增删_PHP教程
  8. SpringBoot Starter自动装配的原理
  9. logback按等级输出到不同日志文件
  10. 【渝粤教育】电大中专跨境电子商务理论与实务 (30)作业 题库