题意:
       给一个n*n的矩阵A,然后求S=A + A^2 + A^3 + ..+ A^k.

思路:
      矩阵快速幂,这个题目挺新颖的,以往的矩阵快速幂都是退出公式,然后构造矩阵,这个比较特别,直接上子矩阵吧
A 1   平方后得到 A^2 1+A  三次方   A^3   1+A+A^2
0 1               0   1             0     1       ...这样就行了,
还有注意这个是矩阵套矩阵,然后就是快速幂了,比较容易实现,有一点要注意,

大矩阵的单位矩阵只有对角线才是单位小矩阵,还有一个地方,就是最后我们要在大矩阵的1 2 位置减去单位矩阵,这个减去单位矩阵后如果比0小怎么办,我的处理方法是比0小就再加上余数。


#include<stdio.h>
#include<string.h>typedef struct
{int mat[32][32];
}M;typedef struct
{M MAT[3][3];
}MM;int n ,MOD;M matM(M a ,M b)
{M c;memset(c.mat ,0 ,sizeof(c.mat));for(int k = 1 ;k <= n ;k ++)for(int i = 1 ;i <= n ;i ++)if(a.mat[i][k])for(int j = 1 ;j <= n ;j ++)c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % MOD;return c;
}M addM(M a ,M b)
{M c;memset(c.mat ,0 ,sizeof(c.mat));for(int i = 1 ;i <= n ;i ++)for(int j = 1 ;j <= n ;j ++)c.mat[i][j] = (a.mat[i][j] + b.mat[i][j]) % MOD;return c;
}MM matMM(MM a ,MM b)
{MM c;for(int i = 1 ;i <= 2 ;i ++)for(int j = 1 ;j <= 2 ;j ++)for(int k = 1 ;k <= n ;k ++)for(int l = 1 ;l <= n ;l ++)c.MAT[i][j].mat[k][l] = 0;for(int i = 1 ;i <= 2 ;i ++)for(int j = 1 ;j <= 2 ;j ++)for(int k = 1 ;k <= 2 ;k ++)c.MAT[i][j] = addM(c.MAT[i][j] ,matM(a.MAT[i][k] ,b.MAT[k][j]));return c;
}MM quickMM(MM a ,int b)
{MM c;for(int i = 1 ;i <= 2 ;i ++)for(int j = 1 ;j <= 2 ;j ++)for(int k = 1 ;k <= n ;k ++)for(int l = 1 ;l <= n ;l ++)c.MAT[i][j].mat[k][l] = 0;for(int k = 1 ;k <= n ;k ++)c.MAT[1][1].mat[k][k] = c.MAT[2][2].mat[k][k] = 1;while(b){if(b & 1) c = matMM(c ,a);a = matMM(a ,a);b >>= 1;}return c;
}int main ()
{int i ,j ,b;MM A;while(~scanf("%d %d %d" ,&n ,&b ,&MOD)){//MOD = 10000000;for(i = 1 ;i <= n ;i ++)for(j = 1 ;j <= n ;j ++){scanf("%d" ,&A.MAT[1][1].mat[i][j]);A.MAT[2][1].mat[i][j] = 0;if(i == j)A.MAT[1][2].mat[i][j] = A.MAT[2][2].mat[i][j] = 1;else  A.MAT[1][2].mat[i][j] = A.MAT[2][2].mat[i][j] = 0;}MM ans = quickMM(A ,b + 1);for(int i = 1 ;i <= n ;i ++)for(int j = 1 ;j <= n ;j ++){if(i == j) ans.MAT[1][2].mat[i][j] --;if(ans.MAT[1][2].mat[i][j] < 0) ans.MAT[1][2].mat[i][j] += MOD;if(j == n) printf("%d\n",ans.MAT[1][2].mat[i][j]);else printf("%d " ,ans.MAT[1][2].mat[i][j]);}}return 0;}

POJ3233不错的矩阵(矩阵套矩阵)相关推荐

  1. 矩阵幂之和(矩阵乘法)

    2481. [HZOI 2016][POJ3233]矩阵幂之和 时间限制:2 s   内存限制:128 MB [题目描述] 给定一个n*n的矩阵A和一个正整数k,求S=A+A^2+A^3+...+A^ ...

  2. 计算机视觉三维重建的几何基础:坐标系与关键矩阵(基础矩阵、本质矩阵、单应矩阵)...

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/159194599 编辑丨3D视觉工坊 你站在桥上看风景, 看风景人在楼上看你. 明月装饰了你的窗子, 你装饰了别人 ...

  3. lu分解法matlab_MIT 18.065—机器学习中的矩阵方法02 矩阵乘法与矩阵分解

    数据分析.信号处理和机器学习中的矩阵方法 第02讲 矩阵乘法与矩阵分解 新MIT 线性代数|机器学习(中英机翻字幕)18.065 by Gilbert Strang_哔哩哔哩 (゜-゜)つロ 干杯~- ...

  4. 低秩矩阵完备_矩阵之芯 SVD: 基本应用以及与其他分解的关系

    上一篇里忘记说了,为什么取名为矩阵之芯呢? 矩阵之芯 SVD: 奇异值分解及其几何解释除了这东西在线性代数里确实比较重要外,从长相看,是不是有点上面图片里的那家伙的身形.矩阵的奇异值分解 ,一分为仨, ...

  5. 在matlab表示特殊矩阵,MATLAB特殊矩阵以及矩阵转置

    特殊矩阵 通用特殊矩阵 zeros函数:产生全0矩阵,即零矩阵. ones函数:产生....1矩阵,即幺矩阵. eye函数:产生对角线为1的矩阵,当矩阵是方正时,得到单位矩阵. rand函数:产生(0 ...

  6. 基础矩阵,本质矩阵,单应性矩阵讲解

    ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作.其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个 ...

  7. 计算机视觉中本质矩阵的概念,【计算机视觉】Lecture 19:本质矩阵和基础矩阵...

    对极几何 左边 极点:相机1所看到的相机2的位置. 右边 极点:相机2所看到的相机1的位置 对极几何 对应点位于共轭极线上 对极几何 给定一幅图像中的一个点,我们如何确定在第二幅图像中要搜索的对应极线 ...

  8. 投影与三维视觉——本征矩阵和基础矩阵

    原文:http://blog.csdn.net/xiaoyinload/article/details/49000855 本征矩阵E:它包含了物理空间中两个摄像机相关的旋转(R)和平移信息(T).T和 ...

  9. 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

    文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...

最新文章

  1. 一图读懂HDFS--大数据平台技术栈06
  2. java option作用_java – 类Option [T]的意义是什么?
  3. fix--向零方向取整
  4. 【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters
  5. js解析json数组+java对象转json字符串
  6. php将word转txt,PHP如何将将word文件转为pdf
  7. 【OpenCV 例程200篇】61. 导向滤波(Guided filter)
  8. 1389. 按既定顺序创建目标数组
  9. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)
  10. ABB码垛算法程序与设计接口参考案例
  11. 开源APP源代码、游戏源代码
  12. 在几何画板中如何制作圆柱的侧面展开动画_几何画板制作圆柱体的形成动画演示方法...
  13. TOGAF架构学习总结
  14. 高新技术企业都需要准备哪些资料
  15. 怎样缩小图片大小kb?
  16. 商标是否占用查询方法、阿里云商标注册方法
  17. appdata文件太大了可以删除吗?
  18. 压缩包文件的解压密码如何破解
  19. 找不到包 \ 符号,idea中包已经导入,但是运行还是提示找不到包问题
  20. tq2440 lcd 移植

热门文章

  1. 使用思维导图,优雅的完成自己的代码
  2. 字符串阵列分别输出元素的索引,原值和长度
  3. 【云周刊】第132期:走近40+世界级AI专家!第三届中国人工智能大会资料分享...
  4. 优云携手网易云 助力企业“互联网+”转型
  5. 转 openssl 建立服务器证书
  6. ActiveMQ简单使用介绍
  7. 【poj解题】1308
  8. 常见的服务器内存浅析
  9. VoIP系列:VoIP的劣势
  10. 【Vegas原创】添加SQL Server Agent作业步骤中的运行身份