Matrix Power Series

r时间限制: 1 Sec 内存限制: 512 MB

题目描述

给定矩阵A,求矩阵S=A1+A2+……+A^k,输出矩阵,S矩阵中每个元都要模m。

数据范围: n (n ≤ 30) , k (k ≤ 109) ,m (m < 104)

输入

输入三个正整数n,k,m

输出

输出矩阵S mod m

样例输入

2 2 4

0 1

1 1

样例输出

1 2

2 3

这道题不多说,可以得出加速矩阵(E为单位矩阵,也就是形为\(\begin{bmatrix}1&0&...&0\\0&1&...&0\\... &...&...&...\\0&0& ...&1\end{bmatrix}\)的矩阵,任何矩阵乘以这个单位矩阵还是原矩阵):

\(\begin{bmatrix}
A &E \\
0 & E
\end{bmatrix}\)*\(\begin{bmatrix} A &E \\ 0 & E \end{bmatrix}\)=\(\begin{bmatrix} A^{2} &E+A \\ 0 & E \end{bmatrix}\)

所以根据题目的要求,答案便是\(\begin{bmatrix}
A &E \\
0 & E
\end{bmatrix}^{k+1}\)的(1,2)

主要难点是矩阵套矩阵,详见代码:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define N 35
#define P 5
#define LL long long LL fuck,k,mod; struct M {
int n,m,c[N][N];
M() {
n=m=fuck;
memset(c,0,sizeof(c));
}
M operator * (const M& a) {
M r;
r.n=n;r.m=a.m;
for(int i=1;i<=r.n;i++)
for(int j=1;j<=r.m;j++)
for(int k=1;k<=m;k++)
r.c[i][j]= ( r.c[i][j] + (c[i][k] * a.c[k][j] ) % mod) % mod;
return r;
}
M operator + (const M& a) {
M r;
for(int i=1;i<=r.n;i++)
for(int j=1;j<=r.m;j++)
r.c[i][j]=(c[i][j]+a.c[i][j]) %mod;
return r;
}
M operator - (const M& a) {
M r;
for(int i=1;i<=r.n;i++)
for(int j=1;j<=r.m;j++)
r.c[i][j]=r.c[i][j]+(mod+c[i][j]-a.c[i][j]) %mod;
return r;
}
void _read() {
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%lld",&c[i][j]);
}
void pre() {
n=m=fuck;
for(int i=1;i<=fuck;i++)
c[i][i]=1;
}
void _print() {
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(j!=1) cout<<" ";
cout<<c[i][j];
}
if(i!=n) puts("");
}
puts("");
}
}fuckk; struct Matrix {
LL n,m;
M c[P][P];
Matrix() {
m=2,n=2;
memset(c,0,sizeof(c));
};
Matrix operator * (const Matrix& a) {
Matrix r;
r.n=n;r.m=a.m;
for(int i=1;i<=r.n;i++)
for(int j=1;j<=r.m;j++)
for(int k=1;k<=m;k++)
r.c[i][j]=r.c[i][j] + (c[i][k] * a.c[k][j] );
return r;
} Matrix pow(Matrix a, LL indexx) {
Matrix sum;sum.n=sum.m=2;
sum.c[1][1].pre();
sum.c[2][2].pre();
//a.c[1][2]._print();
while(indexx>0) {
if(indexx&1) sum=sum*a;
/*sum.c[1][1]._print();
sum.c[1][2]._print();
sum.c[2][1]._print();
sum.c[2][2]._print();*/
a=a*a;
//a.c[1][1]._print();
indexx/=2;
}
return sum;
}
void sub() {
c[1][2]=c[1][2]-fuckk;
} }ans; int main() {
cin>>fuck>>k>>mod;
M a,b;
a._read();
b.pre();
fuckk=b;
ans.c[1][1]=a;
ans.c[1][2]=ans.c[2][2]=b;
//ans.test(ans);
ans=ans.pow(ans,k+1);
//ans.c[1][2]._print();
ans.sub();
ans.c[1][2]._print();
}

C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速的更多相关文章

  1. Poj 3233 Matrix Power Series(矩阵乘法)

    Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...

  2. 矩阵十点【两】 poj 1575 Tr A poj 3233 Matrix Power Series

    poj 1575  Tr A 主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 题目大意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的 ...

  3. POJ 3233 Matrix Power Series (矩阵乘法)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 11954   Accepted:  ...

  4. 构造矩阵解决这个问题 【nyoj299 Matrix Power Series】

    矩阵的又一个新使用方法,构造矩阵进行高速幂. 比方拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + - + Ak. 让你求s. ...

  5. POJ 3233 Matrix Power Series(矩阵快速幂)

    Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 19338 Accepted: 8161 ...

  6. POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】

    任意门:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K To ...

  7. [ACM] POJ 3233 Matrix Power Series (求矩阵A+A^2+A^3...+A^k,二分求和或者矩阵转化)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 15417   Accepted:  ...

  8. poj 3233 Matrix Power Series(矩阵二分,高速幂)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 15739   Accepted:  ...

  9. [POJ3233]Matrix Power Series 分治+矩阵

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...

随机推荐

  1. nginx stream module on mt7621(newifi3 d2) with openwrt 18.06.2

    因为需要使用nginx的stream模块,专门编译了一个nginx安装包,适用于openwrt 18.06.2版本,mt7621平台 顺便记录一下编译的笔记: 1.修改feeds/packages/n ...

  2. vue中v-cloak解决刷新或者加载出现闪烁(显示变量)

    在使用vue绑定数据的时候,渲染页面时会出现变量闪烁,例如 <div class="#app"> <p>{{value.name}}</p> & ...

  3. VS2017企业版密钥

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFVisual Studio 2017(VS2017 ...

  4. rsa加密算法及js的JSEncrypt实现前端加密

    最近的项目中用到了rsa加密算法,在实现了相关功能之后,我去了解了一下rsa相关原理,于是就写了这篇博客啦. 首先介绍一下什么是rsa加密算法: 作为非对称加密算法的老大,rsa号称是地球上最安全的加 ...

  5. git tag 查看标签列表、切换标签

    1.查看标签列表 git tag 2.切换标签(需要指定分支 test 为分支.v0.17.7 为标签版本) git checkout -b test v0.17.7

  6. ios 根据 schemes 打开 app

    公司出需求,要让 h5链接直接打开用户的 app,如果没有安装 app 直接跳转到 appStore 这就需要给 app 配置 schemes 即可 1.在Info.plist中 LSApplicat ...

  7. Mac 怎么通过自带终端连接linux服务器

    简单来说,就两步骤 · 打开Mac终端,切换到root权限下 切换root权限: sudo -i ·通过ssh命令连接linux服务器 ssh root@127.0.0.1 root是账户名,@后面的 ...

  8. MySQL数据库开发常见问题及几点优化!

    从一下三个方面考虑: 库表设计 慢 SQL 问题 误操作.程序 bug 时怎么办 一.库表设计 1.1.引擎选择 在 MySQL5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运 ...

  9. 一个不错的多叉树, stl风格

    tree<std::string> tr9; tree<std::string>::pre_order_iterator iter1; tr9.set_head("h ...

  10. MVC htmlAttributes and additionalViewData

    @Html.TextBoxFor(m => m.UserName, new { title = "ABC" }) // 输出结果为 <input data-val=&q ...