https://vjudge.net/contest/182427#problem/B

Description

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

Input

The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 10^9) and m (m < 10^4). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.

Output

Output the elements of S modulo m in the same way as A is given.

Sample Input

2 2 4
0 1
1 1
Sample Output

1 2
2 3
Source

POJ Monthly–2007.06.03, Huang, Jinsong

如果k为偶数,那么(A+A^2+….A^K) = (A+…+A^K/2)+A^K/2*(A+…+A^K/2)
如果k为奇数,那么(A+A^2+….A^K) = (A+…+A^K/2)+A^K/2*(A+…+A^K/2)+A^k

S(k)=A+A^2+……+A^k
偶数: S(k)=S(k/2)+S(k/2)*A^(k/2)
奇数: S(k)=S(k/2)+S(k/2)*A^(k/2)+A^k;

直接用快速幂计算需要O(n)的时间,10^9的数据会超时
通过上面的公式解决超时问题

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int n,k,mod;
struct Matrix
{int a[35][35];
};
Matrix m,unit;
Matrix add(Matrix x,Matrix y)//矩阵加法
{Matrix ans;for(int i=0; i<n; i++)for(int j=0; j<n; j++){ans.a[i][j]=0;ans.a[i][j]=(x.a[i][j]+y.a[i][j])%mod;}return ans;
}
Matrix multi(Matrix x,Matrix y)//矩阵乘法
{Matrix ans;for(int i=0; i<n; i++)for(int j=0; j<n; j++){ans.a[i][j]=0;for(int k=0; k<n; k++)ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j])%mod;}return ans;
}
Matrix mqmod(int l)//快速幂
{Matrix p,q;p=m,q=unit;while(l){if(l&1)q=multi(q,p);p=multi(p,p);l>>=1;}return q;
}
Matrix matrixsum(int k)//利用公式递归求解
{if(k==1)return m;Matrix temp,tnow;temp=matrixsum(k/2);tnow=mqmod(k/2);temp=add(temp,multi(temp,tnow));if(k&1)//奇数的时候多加上A^ktemp=add(mqmod(k),temp);return temp;
}
int main()
{scanf("%d%d%d",&n,&k,&mod);int q;for(int i=0; i<n; i++)for(int j=0; j<n; j++){scanf("%d",&q);m.a[i][j]=q%mod;unit.a[i][j]=(i==j);//如果i==j那么矩阵中此值就是1,否则为0,就是主对角线是1的单位矩阵}Matrix ans;ans=matrixsum(k);for(int i=0; i<n; i++){for(int j=0; j<n-1; j++)printf("%d ",ans.a[i][j]);printf("%d\n",ans.a[i][n-1]);}return 0;
}

等比矩阵求和-POJ3233相关推荐

  1. 2018第九届蓝桥杯C/C++ B国赛 —— 第六题:矩阵求和

    矩阵求和 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作. 今天小明的任务是填满这么一张表: 表有 n 行 n 列,行和列的编号都从1算起. 其中第 i 行第 j 个元素的值是 g ...

  2. 输入挂(bzoj 2901: 矩阵求和)

    很少用输入挂,以为不超时就好了,但是这题貌似不用过不去啊 只好拿出来用了,当个模板 原理是用getchar()读入会比用scanf快一些 int Read() {int x = 0, f = 1;ch ...

  3. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)

    昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...

  4. BZOJ2901: 矩阵求和

    题解:  对于表达式用前缀和优化 n^2预处理 n*m查询 #include <algorithm> #include <iostream> #include <cstr ...

  5. BZOJ 2901: 矩阵求和

    2901: 矩阵求和 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 411  Solved: 216 [Submit][Status][Discus ...

  6. 2018第九届蓝桥杯B组决赛题解第六题 矩阵求和

    标题:矩阵求和 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作. 今天小明的任务是填满这么一张表: 表有 n 行 n 列,行和列的编号都从1算起. 其中第 i 行第 j 个元素的值 ...

  7. sum 矩阵求和 matlab

    matlab中针对的数据大多是以矩阵形式来处理,求和函数是sum 下面通过几个例子来介绍求和函数的应用: matlab中: a=sum(A)  %列求和 b=sum(A,2) %行求和 c=sum(A ...

  8. BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和)

    BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和) Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值. ...

  9. matlab div矩阵运算,【求助】多维矩阵求和运算!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 4-D矩阵:B(:,:,i,j) 具体形式如下! 想对每j列进行对应项求和相加, 整了一上午都-- 谢谢大家! B(:,:,1,1) = 1.0e+010 ...

  10. 矩阵求和c语言通俗易懂

    #include<stdio.h>//标准的输入输出流 #include<stdlib.h>//system("pause")要用 int main(voi ...

最新文章

  1. 学习PCL库你应该知道的C++特性
  2. openmv4闪灯说明_OpenMV Cam
  3. 2014025679 《嵌入式系统程序设计》第五周学习总结
  4. 指针、数组、函数阶段小结
  5. boost function对象
  6. java判断时间是否在时间段内_具有C语言基础,利用半年时间学习Java是否够用
  7. 探探自动配对PHP_CentOS7 - 安装Apache HTTP Server和PHP
  8. (71)FPGA模块调用(system Verilog调用VHDL)
  9. WampServer安装教程
  10. cmi码型变换matlab程序_58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!...
  11. 树莓派2 安装linux系统安装教程,安装Ubuntu MATE 15.04 for 树莓派2
  12. python读取XML中bndbox和object name的方法
  13. Android - 浅谈 Handler 机制
  14. outlook导入服务器邮件,OUTLOOK怎么导入邮件?
  15. On-board Diagnostic(OBD)
  16. 计蒜客 god of gambler
  17. 通讯录2.0(动态内存增长版本)
  18. windows的特殊对话框
  19. cf不能全屏win7的解决方法_怎么解决win7电脑没声音 win7电脑没声音解决方法介绍【详解】...
  20. Arduino开发教程汇总

热门文章

  1. php货币2019年12月31日汇率,2019年12月31日中国外汇交易中心受权公布人民币汇率中间价公告...
  2. Android 手机卡了怎么办
  3. 深入理解java虚拟机(zz)
  4. 计算机技术与软件专业技术资格考试(初级程序员)(一)
  5. Citrix PVS7.6 测试调试
  6. MyBatis之ResultMap结果集映射
  7. 杂记 什么是IP核?
  8. 致计算机专业准大一新生
  9. “责任”也是一种竞争力:《穹顶之下》与美丽中国
  10. 网络工程师有什么发展?