poj3233(矩阵快速幂的和)
题目链接:http://poj.org/problem?id=3233
Time Limit: 3000MS | Memory Limit: 131072K | |
Total Submissions: 28105 | Accepted: 11461 |
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 ≤ 109) and m (m < 104). 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
思路:之前做的都是直接求矩阵的多少次方,这次做的是不仅仅要求多少次方,还要求它们的和,那么该怎么做呢? 刚开始想的是会不会是用一个for循环把1~k每一个都用一次矩阵快速幂,但是很快就否认了,这样肯定会超时,然后想了很久,发现其实是这样的:这题就是求一个矩阵的和式:S(k),直接对和式建立递推:
建立矩阵,注意此处S和A都是2*2的矩阵,E表示单位矩阵,O表示零矩阵(全是0,与其他矩阵相乘都为0),显然E,O都是2*2的
所以第一个样例是一个4*4的矩阵,
所以每次我们构造矩阵都是构造n*2的矩阵
具体看代码:
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1000; const int maxn=30+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 struct matrix {int a[maxn<<1][maxn<<1]; }ans,res,c; int n,k,m; int b[maxn<<1][maxn<<1]; void init()//这里全都是给矩阵赋值的过程 {memset(ans.a,0,sizeof(ans.a));memset(res.a,0,sizeof(res.a));memset(c.a,0,sizeof(c.a));for(int i=0;i<n;i++){for(int j=0;j<n;j++)cin>>b[i][j];//输入的矩阵 }for(int i=n;i<n*2;i++){for(int j=0;j<n;j++){c.a[i][j]=b[i-n][j];//代表第二个矩阵,也就是不变的那个 }}for(int i=0;i<n;i++){res.a[i][i]=res.a[i][i+n]=1;//单位矩阵的赋值 }for(int i=n;i<n*2;i++){for(int j=n;j<n*2;j++){res.a[i][j]=b[i-n][j-n];//转移矩阵 }}for(int i=0;i<n*2;i++)ans.a[i][i]=1;//单位矩阵 } matrix multiply(matrix x,matrix y) {matrix temp;memset(temp.a,0,sizeof(temp));for(int i=0;i<n*2;i++){for(int j=0;j<n*2;j++){for(int l=0;l<n*2;l++){temp.a[i][j]=(temp.a[i][j]+x.a[i][l]*y.a[l][j]%m)%m;}}}return temp; } void Quickpow()//这里每个矩阵快速幂都是一样的 {while(k){if(k&1)ans=multiply(ans,res);res=multiply(res,res);k>>=1;} } void solve()//这就是最后两个矩阵相乘的过程了 {ans=multiply(ans,c);for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<ans.a[i][j]<<" ";//最后只要输出左上角那个矩阵就好了cout<<endl;} } int main() {cin>>n>>k>>m;init();Quickpow();solve();return 0; }
转载于:https://www.cnblogs.com/caijiaming/p/9651048.html
poj3233(矩阵快速幂的和)相关推荐
- 快速幂、快速乘、矩阵快速幂
文章目录 一 快速幂 模板 模板例题 二 快速乘 模板 三 矩阵快速幂 例题 模板题 应用题1 应用题2 一 快速幂 目的:当我们在求f(x) = a ^ x % mod时,f(x)的结果会呈指数型增 ...
- 数论(二)快速幂 (矩阵快速幂)等比数列求和 最大公因数和最小公倍数
快速幂 1.快速幂用于快速计算a的b次方,时间复杂度是O(log2b) 2.用于a和b比较大小的情况,常用的快速幂是带模快速幂 3.分析一个例子: 3 15=? 15=(1111)2 3e1 * ...
- 矩阵快速幂+构造方法
与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...
- 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂
原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...
- 快速幂 + 矩阵快速幂
快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...
- HDU4549(矩阵快速幂+快速幂)
f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...
- [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]
解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...
- I-Matrix Power Series POJ - 3233 矩阵快速幂+分治
I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...
- H - Fibonacci POJ - 3070 (矩阵快速幂)
H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...
最新文章
- 树莓派的Raspbian Stretch with desktop和Ubuntu Mate(废弃)
- BOM--location对象、history对象
- 两个tplink路由器有线桥接_tplink和腾达路由器有线桥接设置图解
- java英文拼写检查并自动纠正
- python字典内置方法_柳小白Python学习笔记 12 内置方法之字典方法
- 微软ASP.NET官方网站MVC教程实际操作中的部分问题
- PowerBuilder通过JDBC连接MySQL数据库
- 按键精灵开发传奇手游教程-现在比较火的美杜莎传奇为例
- MapGIS注记文字无损转入ArcGIS软件
- 【Oracle 11g学习路线】
- twitter验证_如何在Twitter上进行验证(或至少尝试一下)
- 老小白手机安装termux(换源)运行Python2
- 拥有十多年欧美金融行业经验,他曾任硅谷Top2互联网金融公司Prosper核心高管,突然回国,究竟是为何?
- Linux系统如何优化
- javaScript(正则,DOM)
- 【学习笔记】《卓有成效的管理者》 第二章 掌握自己的时间
- hp工作站 安装服务器系统,HP工作站操作系统安装说明.pdf
- 我的世界java服务器搭建_Linux搭建我的世界服务端
- 【小技巧】AI语音合成,文本音频互转经验分享
- 攻防世界逆向高手题的key
热门文章
- 网页设计-[CSS+DIV设计实例:超酷的竖排导航栏 ]
- Redis的中并发问题的解决方案小结
- 【报告分享】2022微信视频号生态发展研究报告.pdf(附下载链接)
- 《统计学习方法》代码全解析——第一部分统计学习方法概论
- 剑指offer 面试题03. 数组中重复的数字
- 全球首发!惯性导航导论(剑桥大学)第九部分
- 算法大赛十强战队解题方案大公开!【附PPT下载】
- oracle and和or的执行顺序,Oraclewhere语句中and,or,not的执行顺序
- 1-java学习笔记
- 吴恩达机器学习练习2:optimset和fminunc函数