传送门

题意:
思路:
方法一:(二分)
分析:
奇偶分类讨论:


1.代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=50;int mod,n;struct jz{int a[N][N];jz(){memset(a,0,sizeof(a));}
}ini,res;jz mul(jz x,jz y){//矩阵乘法 jz tmp;for(int i=0;i<n;i++)for(int k=0;k<n;k++)for(int j=0;j<n;j++)tmp.a[i][j]=(tmp.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;return tmp;
}jz qpower(jz x,int k){//矩阵快速幂 jz tmp;for(int i=0;i<n;i++)tmp.a[i][i]=1;while(k){if(k&1) tmp=mul(tmp,x);k>>=1;x=mul(x,x);}return tmp;
}jz add(jz x,jz y){//矩阵加法 jz tmp;for(int i=0;i<n;i++)for(int j=0;j<n;j++)tmp.a[i][j]=(x.a[i][j]+y.a[i][j])%mod;return tmp;
}jz sol(jz x,int k){jz tmp,y;if(k==1)return x;tmp=sol(x,k/2);if(k&1){y=qpower(ini,k/2);return add(add(tmp,mul(tmp,y)),qpower(ini,k));}else{y=qpower(ini,k/2);return add(tmp,mul(y,tmp));}
}int main(){int k;cin>>n>>k>>mod;for(int i=0;i<n;i++)for(int j=0;j<n;j++) cin>>ini.a[i][j];res=sol(ini,k);for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<res.a[i][j];if(j!=(n-1))cout<<' ';}cout<<endl;} return 0;
}

2.代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=50;int mod,n;struct jz{int a[N][N];jz(){memset(a,0,sizeof(a));}
}ini,res;jz mul(jz x,jz y){//矩阵乘法 jz tmp;for(int i=0;i<n;i++)for(int k=0;k<n;k++)for(int j=0;j<n;j++)tmp.a[i][j]=(tmp.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;return tmp;
}jz qpower(jz x,int k){//矩阵快速幂 jz tmp;for(int i=0;i<n;i++)tmp.a[i][i]=1;while(k){if(k&1) tmp=mul(tmp,x);k>>=1;x=mul(x,x);}return tmp;
}jz add(jz x,jz y){//矩阵加法 jz tmp;for(int i=0;i<n;i++)for(int j=0;j<n;j++)tmp.a[i][j]=(x.a[i][j]+y.a[i][j])%mod;return tmp;
}jz sol(jz x,int k){jz tmp,y;if(k==1)return x;tmp=sol(x,k/2);//Sif(k&1){y=qpower(x,k/2+1);//Atmp=add(mul(y,tmp),tmp);return add(tmp,y);}else{y=qpower(x,k/2);return add(mul(y,tmp),tmp);}
}int main(){int k;cin>>n>>k>>mod;for(int i=0;i<n;i++)for(int j=0;j<n;j++) cin>>ini.a[i][j];res=sol(ini,k);for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<res.a[i][j];if(j!=(n-1))cout<<' ';}cout<<endl;} return 0;
}

方法二:(构造矩阵)
分析:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=100;int mod,n;struct jz{int a[N][N];jz(){memset(a,0,sizeof(a));}
}ini,res;jz qpower(jz x,int k){//矩阵快速幂 jz tmp;for(int i=0;i<n;i++)tmp.a[i][i]=1;while(k){if(k&1) tmp=mul(tmp,x);k>>=1;x=mul(x,x);}return tmp;
}int main(){int k;cin>>n>>k>>mod;for(int i=0;i<n;i++)for(int j=0;j<n;j++) cin>>ini.a[i][j];for(int i=0;i<n;i++){//构造两个单位矩阵 ini.a[i][i+n]=ini.a[i+n][i+n]=1;}n<<=1;res=qpower(ini,k+1); for(int i=0;i<n/2;i++){for(int j=n/2;j<n;j++){if(j==i+n/2) cout<<(res.a[i][j]-1+mod)%mod;//减E else cout<<res.a[i][j];    if(j!=(n-1))cout<<' ';}cout<<endl;}  return 0;
}

Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)相关推荐

  1. 矩阵快速幂 | 北邮OJ | 96. 矩阵幂

    https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/96/ reference: https://www.cnblogs.com/cmmdc/p/ ...

  2. 线性递推式+求第N项,用矩阵快速幂 如何构造初始矩阵

    转载于:https://www.cnblogs.com/lhclqslove/p/9438095.html

  3. 【矩阵乘法】Matrix Power Series(poj 3233)

    Matrix Power Series poj 3233 题目大意 给你一个矩阵A,让你求S=A+A2+A3+-+AkS = A + A^2 + A^3 + - + A^kS=A+A2+A3+-+Ak ...

  4. 矩阵快速幂的学习(系统的学习)

    学习博客:https://www.cnblogs.com/cmmdc/p/6936196.html https://www.cnblogs.com/yan-boy/archive/2012/11/29 ...

  5. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x    求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...

  6. 线性代数 —— 矩阵快速幂

    [概述] 矩阵快速幂利用矩阵的乘法与整数快速幂的结合,能够快速的算出 n 阶方阵 A 的 M 次幂 A^b,其结果仍是一个矩阵,无具体含义,在信息学竞赛中,矩阵快速幂常用于求解线性递推关系. 关于矩阵 ...

  7. 矩阵快速幂(矩阵加速)

    //南昌理工ACM集训队 放心食用 矩阵加速 快速幂(前置技能) 矩阵快速幂 可乐 附个模板 最后小结 本人小白如有不对欢迎指正ლ(╹◡╹ლ) 矩阵加速 快速幂(前置技能) 对于普通的求a的b次方,一 ...

  8. 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)

    杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 传送门 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 矩阵快速幂模板 Count Problem Descript ...

  9. 快速幂与矩阵快速幂学习笔记

    首先附上我学习快速幂的链接 https://blog.csdn.net/qq_19782019/article/details/85621386 并从中摘抄了一些有用的东西记录下来作为总结 1.&qu ...

  10. POJ3070矩阵快速幂简单题

    题意:       求斐波那契后四位,n <= 1,000,000,000. 思路:        简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...

最新文章

  1. 定制你的敏捷方法:以结果为导向
  2. oracle误删表空间 无法关闭,oracle 误删表空间文件启动不了数据库的解决办法
  3. 什么牌子的平板电脑好_台式电脑哪个牌子好
  4. 2017年4月21号课堂笔记
  5. beego——模板处理
  6. iOS在支持arc的工程中,导入不支持arc的第三方的插件
  7. 10月24号、25号、26号三天PC端云音乐项目总结
  8. AI智能人脸识别系统
  9. c语言dp算法,通过leetcode学算法——动态规划(dp)
  10. html设置背景图片透明度代码,css设置图片背景透明度
  11. Notepad远程Xftp服务器使用技巧
  12. Mysql比较运算符实战
  13. 微信小程序普通二维码解析
  14. Python+OpenCV人脸识别签到考勤系统
  15. BERT |(3)BERT模型的使用--pytorch的代码解释
  16. margin-left:-100%
  17. oracle设置session空闲时间超时断开
  18. 拉勾 python_python 登录拉钩
  19. Polyhedral Compilation及ISL学习资料
  20. word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

热门文章

  1. java解zip压缩包命令_Java进程-无法解压缩zip文件
  2. ITERATE MYSQL 例子_介绍MySQL的Iterate迭代语句实例代码
  3. 云计算基础平台iaas(openstack)超级详细搭建(一)
  4. Java入门第一个小程序
  5. 安卓开机logo和开机动画的几种实现方法
  6. 如何知道自己得了鼻炎?
  7. c语言中unsigned类型转换为signed类型
  8. 【AICG】【Midjourney】AI自动生成图片的初接触
  9. python 编译器目录,python的编译器
  10. music generation with DL and sings datasets music datasets