【洛谷P3390】矩阵快速幂
矩阵快速幂
矩阵乘法:
A[n*m]*B[m*k]=C[n*k];
C[i][j]=sum(A[i][1~n]+B[1~n][j])
为了便于赋值和定义,我们定义一个结构体储存矩阵:
struct Matrix{
long long m[][];
};
X*Y:
Matrix cheng(Matrix X,Matrix Y)
{
Matrix C;
for(long long i=;i<=n;i++)
for(long long j=;j<=n;j++)
{
C.m[i][j]=;
for(long long l=;l<=n;l++)
C.m[i][j]=(C.m[i][j]+X.m[i][l]*Y.m[l][j])%MOD;
}
return C;
}
快速幂:
把k转化为二进制,
如k=10(10)=1010(2);
a^10=a^(2^3) * a^(2^1)=(a^8)*(a^2)
代码:
Matrix qsort(Matrix X,long long p)
{
Matrix S=E;
while(p)
{
if(p&) S=cheng(S,X);
X=cheng(X,X);
p>>=;
}
return S;
}
其中E是一个矩阵,相当于数字1,任何一个矩阵A*E=A。
当n=10时,E等于
1,0,0,0,0,0,0,0,0,0
0,1,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,0,0
0,0,0,1,0,0,0,0,0,0
0,0,0,0,1,0,0,0,0,0
0,0,0,0,0,1,0,0,0,0
0,0,0,0,0,0,1,0,0,0
0,0,0,0,0,0,0,1,0,0
0,0,0,0,0,0,0,0,1,0
0,0,0,0,0,0,0,0,0,1
生成矩阵E:
for(long long i=;i<=n;i++)
E.m[i][i]=;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,k;
const long long MOD=;
struct Matrix{
long long m[][];
};
Matrix A,E,ANS;
Matrix cheng(Matrix X,Matrix Y)
{
Matrix C;
for(long long i=;i<=n;i++)
for(long long j=;j<=n;j++)
{
C.m[i][j]=;
for(long long l=;l<=n;l++)
C.m[i][j]=(C.m[i][j]+(X.m[i][l]*Y.m[l][j]))%MOD;
}
return C;
}
Matrix qsort(Matrix X,long long p)
{
Matrix S=E;
while(p)
{
if(p&) S=cheng(S,X);
X=cheng(X,X);
p>>=;
}
return S;
}
int main()
{
scanf("%lld%lld",&n,&k);
for(long long i=;i<=n;i++)
E.m[i][i]=;
for(long long i=;i<=n;i++)
for(long long j=;j<=n;j++)
scanf("%lld",&A.m[i][j]);
ANS=qsort(A,k);
for(long long i=;i<=n;i++)
{
for(long long j=;j<=n;j++)
printf("%lld ",ANS.m[i][j]);
puts("");
}
return ;
}
【洛谷P3390】矩阵快速幂的更多相关文章
- P3390矩阵快速幂
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- 【luogu P3390 矩阵快速幂】 模板
题目链接:https://www.luogu.org/problemnew/show/P3390 首先要明白矩阵乘法是什么 对于矩阵A m*p 与 B p*n 的矩阵 得到C m*n 的矩阵 矩阵 ...
- 【洛谷】P1229快速幂
题目链接:https://www.luogu.org/problemnew/show/P1226 题意:求b^p % m之后的结果 题解:快速幂模板 代码: #include<iostream& ...
- 模板【洛谷P3390】 【模板】矩阵快速幂
P3390 [模板]矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 矩阵A的大小为n×m,B的大小为n×k,设C=A×B 则\(C_{i,j}=\sum\limits_{k=1}^{n}A_{i, ...
- 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]
洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 299 Solved: 207 Description 加里敦星球的人 ...
- 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
- 3990 [模板]矩阵快速幂 洛谷luogu
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- 洛谷P1349 广义斐波那契数列(矩阵快速幂)
P1349 广义斐波那契数列 https://www.luogu.org/problemnew/show/P1349 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定 ...
- 洛谷P1962 斐波那契数列(矩阵快速幂)
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...
随机推荐
- shell查看内存
<1>jps<2>ps<3>free<4>df<5>top jps: 很多Java命令都在jdk的JAVA_HOME/bin/目录下面,jp ...
- GRE新东方推荐学习方法(2010年左右)
单词:新东方新版红宝书(<NEW GRE 词汇精选>),不用<再要你命三个> 填空:新东方绿皮书(扎实的词汇量) 阅读:1 新东方绿皮书:2 <GRE阅读 39+3全攻略 ...
- java && C# 线程
1.多个线程用到同一个资源的话,必须lock 2.为了解决,在竞争的情况下,优先分配资源给A.就是A和B线程都同时在同一时刻需要资源x,然后的话也不清楚系统是具体怎样调度的.或者说怎样调度,都有可 ...
- day06 - Python - 面向对象
本节内容: 引子 面向对象 v.s. 面向过程 面向对象编程介绍 面向对象的特性: 封装 继承 多态 类.方法 1.引子 假设你现在是一家游戏公司的开发人员,现 ...
- C# 操作 Excel(.xls和.xlsx)文件
C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...
- 对fastdfs 文件清单进行检查,打印无效的文件
对fastdfs 文件清单进行检查,打印无效的文件2017年12月12日 18:37:18 守望dfdfdf 阅读数:281 标签: fastdfssftpmysql 更多个人分类: 工作 问题编辑版 ...
- mysql-标识列(自增长)
标识列 /* 又称为自增长列 含义:可以不用手动的插入值,系统提供默认的序列值 特点: 1.标识列必须和主键搭配吗?不一定,但要求是一个key,key可以是主键.唯一键.甚至外键(没什么意义) 2.一 ...
- XHML教会我的一些东西-5
这是写好之后的主页代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- 让DIV的滚动条自动滚动到最底部
一个在线聊天窗口,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 我得出的结论是:在选中div时,必须用原生js,jQuery不起作用 <!DOCTYPE> < ...
- WorkFlow 的 Xaml 中找不到引用类型
原来还是需要两步走. 1. 在refernece里面应用project或dll. 2. 在xaml的命名空间里面手动添加.