洛谷 P3390 【模板】矩阵快速幂
这题的确是个模板
但也要提到有关矩乘的内容:
首先什么是矩阵?
给一个线性变换
F(x) (她可能就是个函数,定义域为向量集)
她可以把一个N维向量变成M维
那么显然x的每一维都可能影响着F(x)的每一维,于是F(x)这个线性变换就应该是N*M个在每两维间的小映射构成的。
于是我们可以把她写成M行N列的矩阵(M行N列是出于习惯)
所以矩阵是用于形象的表示线性变换的工具;
所以怎么合乎习惯的构造矩阵呢?
举例说明:
如,有一个三元组(3维向量)x{a,b,c}
定义F(x)={a+b,b+c}
那么可以构造矩阵(2*3的):
1 1 0
0 1 1
为什么是她呢?
其实矩阵的第i行表示x的每一维对F(x)的第i维的影响;
矩阵的i行j列,表示x的第j维以什么权值(其实是多少倍)影响F(x)第i维的构造;
x的所有维对F(x)的某一维的影响的和,即是F(x)这一维的结果;
如,对于上文中的矩阵;
把x{a,b,c}扔进去;
得到F(x)={1*a+1*b+0*c,0*a+1*b+1*c}={a+b,b+c}
然后什么是矩阵乘法呢?
线性变换作为一种映射,当然可以复合啦!
比如F(x)把五维向量变成四维,G(x)把四维向量变成三维;
那么G[F(x)]就能把五维向量变成三维了;
设H(x)=G[F(x)];
那么H(x)的矩阵是什么呢?
她是G和F的乘积;
如何相乘?
回到本题开头的例子:
F显然是个4*5的矩阵,G是3*4的
H应该是3*5的(行数前列数后)
由上题给出的理解方式H[i,j](表示H的第i行第j列)
表示x的第j维对H(x)的第i行的影响
影响是怎么产生的呢?
Ej先是按照F第j列影响了F(x)的每一维;
F(x)的每一维又按照G第i列影响了G[F(x)]的第i维;
如下图的两矩阵(左边为G,右边F)
*** **
*** **
*** **
***
复合得
**
**
**
**
标记复合矩阵的某点
**
**
**
**
原矩阵的如下点贡献了复合矩阵的这个点
*** **
*** **
*** **
***
所以H[i,j]=F[1,j]*G[i,1]+F[2,j]*G[i,2]+F[3,j]*G[i,3]+....啦
话说,你是可以得知H[i,j]与G,F中的那些值有关,但是你怎么得到具体的公式的呢?
这个公式的证明需要需要用到线性变换的性质——F(x+y)=F(x)+F(y)之类的(还是我之前已经用到了?),
由于篇幅,不好细证,其实举例就能理解的,
(就是这东西很好证,博主我不证啦)
然后是代码:
代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
struct ss{
long long a[][];
};
ss re;
ss map;
ss ans;
int n;
long long m;
ss mul(ss ,ss );
int Sqr(long long ); int main()
{
int i,j,k;
scanf("%d%lld",&n,&m);
for(i=;i<=n;i++){
for(j=;j<=n;j++)
scanf("%d",&map.a[i][j]);
ans.a[i][i]=;
}
Sqr(m);
for(i=;i<=n;i++){
for(j=;j<=n;j++)
printf("%d ",ans.a[i][j]);
printf("\n");
}
return ;
} int Sqr(long long m)
{
while(m){
if(m&)
ans=mul(ans,map);
m>>=;
map=mul(map,map);
}
} ss mul(ss x,ss y){
int i,j,k;
for(i=;i<=n;i++)
for(j=;j<=n;j++){
re.a[i][j]=;
for(k=;k<=n;k++)
re.a[i][j]=(re.a[i][j]+x.a[i][k]*y.a[k][j])% ;
}
return re;
}
祝AC哟;
洛谷 P3390 【模板】矩阵快速幂的更多相关文章
- 【洛谷P3390】矩阵快速幂
矩阵快速幂 题目描述 矩阵乘法: A[n*m]*B[m*k]=C[n*k]; C[i][j]=sum(A[i][1~n]+B[1~n][j]) 为了便于赋值和定义,我们定义一个结构体储存矩阵: str ...
- 3990 [模板]矩阵快速幂 洛谷luogu
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- ACM-ICPC 2018 焦作赛区网络预赛- L:Poor God Water(BM模板/矩阵快速幂)
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- 【洛谷 p3390】模板-矩阵快速幂(数论)
题目:给定n*n的矩阵A,求A^k. 解法:利用矩阵乘法的定义和快速幂解答.注意用负数,但是数据太弱没有卡到我......(P.S.不要在 typedef long long LL; 前使用 LL. ...
- 洛谷 P1965 转圈游戏 —— 快速幂
题目:https://www.luogu.org/problemnew/show/P1965 居然真的就只是 ( x + m * 10k % n ) % n 代码如下: #include<ios ...
- 模板【洛谷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, ...
- 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
- 洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1) ] [a(n-1) ] = ...
- 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]
洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 299 Solved: 207 Description 加里敦星球的人 ...
- 洛谷 P1226 【模板】快速幂||取余运算
题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...
随机推荐
- maven项目在eclipse启动报错:java.lang.ClassNotFoundException
问题: 用eclipse创建maven项目的时候,pom.xml中相关的依赖jar已经导入进去,还会报java.lang.ClassNotFoundException的错误,提示找不到相关的jar包, ...
- 再也不怕aop的原理了
1 aop是什么 java的核心思想是面向对象,aop是面向切面编程.是对面向对象的一个补充,简单通俗的理解下aop,假设我们上楼梯,我的目标是三楼,我直接朝我的三楼直接过去,但是我可以在二楼的时候去 ...
- 成倍提高服务器的负载能力:浅谈Jexus的ASP.NET前置缓存技术
一.什么是“ASP.NET前置缓存” ASP.NET前置缓存,是Jexus特色功能之一,是指Jexus把开发者指定的ASP.NET网页某一时刻的内容,缓存到专用的高速缓冲区中,在指定的时间内, ...
- 使用grunt搭建自动化的web前端开发环境
使用grunt搭建自动化的web前端开发环境 我们一定经常听过grunt和gulp,它们都是用于搭建自动化的web前端开发环境的,这里主要介绍grunt的使用,值得一提的是,jQuery.bootst ...
- 第一个hibernate程序HelloWorldHibernate
HelloWorldHibernate步骤: HelloWorld 1,新建java项目hibernate_0100_HelloWorld 2,学习User-library-hibernate,并加入 ...
- Velocity初始化过程解析
velocity就是由template,engine,context组成. 1.首先创建一个template(如果是用在web上就是一个html文件),将需要参数化或实例化的地方用跟context有关 ...
- SQL注入原理讲解
1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号.密码等互 ...
- Thinking in java(1):对象导论
纯粹的面向对象程序设计的几个特性:1. 万物皆对象2. 程序是对象的合集,他通过发消息告诉彼此要做什么3. 每个对象都有自己的由其他对象所构成的存储4. 每个对象都有其类型5. 某一特定类型的所有对象 ...
- 问题集录--新手入门深度学习,选择TensorFlow 好吗?
新手入门深度学习,选择 TensorFlow 有哪些益处? 佟达:首先,对于新手来说,TensorFlow的环境配置包装得真心非常好.相较之下,安装Caffe要痛苦的多,如果还要再CUDA环境下配合O ...
- Postgresql 连接更新
update dbo.m_role_fun a set role_code = b.rsc from (select rsc, fun_code from dbo.m_fun) b where a.f ...