Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

Description

给定n*n的矩阵A,求A^k

Input

第一行,n,k

第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素

Output

输出A^k

共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7

Sample Input

2 1

1 1

1 1

Sample Output

1 1

1 1

Http

Luogu:https://www.luogu.org/problem/show?pid=3390

Source

矩阵乘法,快速幂

解决思路

关于矩阵和矩阵乘法的内容可以到我的这一篇博客查看。

这一题需要注意的就是初始矩阵的赋值,具体请看代码。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std; #define ll long long const int maxN=201;
const ll Mod=1000000007;
const ll inf=2147483647; int n; class Matrix
{
public:
ll M[maxN][maxN];
Matrix(int x)
{
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
M[i][j]=x;
}
Matrix(ll Arr[maxN][maxN])
{
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
M[i][j]=Arr[i][j];
}
void print()
{
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
cout<<M[i][j]<<' ';
cout<<endl;
}
}
}; Matrix operator * (Matrix A,Matrix B)
{
Matrix Ans(0);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
for (int k=0;k<n;k++)
Ans.M[i][j]=(Ans.M[i][j]+A.M[i][k]*B.M[k][j]%Mod)%Mod;
return Ans;
} ll Arr[maxN][maxN]; ll read();
void Pow(ll Po); int main()
{
n=read();
ll Po=read();
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
Arr[i][j]=read();
Pow(Po-1);//注意,这里为什么要-1呢,因为我们知道a^1是a,对于矩阵来说就是A^1是A,所以在传进去的时候先-1(相当于已经进行了一次操作),而若Po==1,则在Pow(Po-1)中不会执行循环,此时也正好是矩阵A(仔细揣摩一下)
return 0;
} ll read()
{
ll x=0;
ll k=1;
char ch=getchar();
while (((ch>'9')||(ch<'0'))&&(ch!='-'))
ch=getchar();
if (ch=='-')
{
k=-1;
ch=getchar();
}
while ((ch>='0')&&(ch<='9'))
{
x=x*10+ch-48;
ch=getchar();
}
return x*k;
} void Pow(ll P)
{
Matrix A(Arr);
Matrix B(Arr);
while (P!=0)
{
if (P&1)
A=A*B;
B=B*B;
P=P>>1;
}
A.print();
return;
}

最新文章

  1. React Native开发技术周报1
  2. TCP Wrapper 特殊使用
  3. Post请求
  4. java中&amp;与&amp;&amp;的区别
  5. PowerShell与CMD在路径解析上的一点不同
  6. 《day16_多线程细节_Eclipse使用》
  7. linux PATH环境变量
  8. 利用OPENSSL 实现MD5加密。
  9. CLR via C# 阅读笔记
  10. scipy cluster聚类 ---Python3
  11. 用sql实现汉字转拼音
  12. POJ-3169 Layout---差分约束系统+Bellman
  13. 9个Console命令
  14. Solidity高级理论(二):Gas
  15. 搭建Hadoop集群(生产环境)
  16. Selenium 、WebDriver :Capability
  17. SpringSecurity-ChannelProcessingFilter的作用
  18. Javascript、Jquery获取浏览器和屏幕各种高度宽度(单位都为px)
  19. IOS开发----生成静态库(.a)
  20. ASP.NET MVC3 入门指南之数据验证[源码RAR下载]

热门文章

  1. 汽车Vin码识别——&#160;一款二手车行业值得拥有的OCR识别软件
  2. Hadoop化繁为简(二)—层层递进轻松入门hdfs
  3. hibernate配置三步走
  4. Spring学习(12)--- @Autowired与@Resource 对比
  5. 关于iphone点击readonly的input虚拟键盘不消失的情况
  6. 限制容器的 Block IO - 每天5分钟玩转 Docker 容器技术(29)
  7. android下的名词/片段解释
  8. thinkphp获取特定字段的两种方法
  9. ViewPager实现无限轮播踩坑记
  10. css3自适应圆