解题思路

题目里要求\(\sum_{i=1}^kA^i\),我们不妨再加上一个单位矩阵,求\(\sum_{i=0}^kA^i\)。然后我们发现这个式子可以写成这样的形式:\(A(A(A...)+E)+E)+E\)于是,我们可以将\(*A+E\)看做一次变换,然后尝试构造一个矩阵。我们发现:

\[(\left[
\begin{matrix}
A & E \\
0 & E
\end{matrix}
\right])^n=
\left[
\begin{matrix}
A^{n+1} & E+A+...+A^n \\
0 & E
\end{matrix}
\right]
\]

然后做法就比较显然了。

不清楚矩阵乘法的可以了解一下线性代数

参考程序

#include <cstdio>
#include <cstring>
#define LL long long
using namespace std; LL n, k, m;
struct Matrix {
LL A[ 70 ][ 70 ];
Matrix operator * ( const Matrix Other ) const {
Matrix Ans;
memset( Ans.A, 0, sizeof( Ans.A ) );
for( LL i = 1; i <= 2 * n; ++i )
for( LL j = 1; j <= 2 * n; ++j )
for( LL k = 1; k <= 2 * n; ++k )
Ans.A[ i ][ j ] = ( Ans.A[ i ][ j ] + A[ i ][ k ] * Other.A[ k ][ j ] % m ) % m;
return Ans;
}
};
Matrix A, E; int main() {
scanf( "%lld%lld%lld", &n, &k, &m );
++k;
memset( A.A, 0, sizeof( A.A ) );
for( LL i = 1; i <= n; ++i )
for( LL j = 1; j <= n; ++j ) scanf( "%lld", &A.A[ i ][ j ] );
for( LL i = 1; i <= n; ++i )
for( LL j = 1; j <= n; ++j ) A.A[ i ][ j ] %= m;
for( LL i = 1; i <= n; ++i )
A.A[ i ][ i + n ] = 1;
for( LL i = 1; i <= n; ++i )
A.A[ i + n ][ i + n ] = 1;
memset( E.A, 0, sizeof( E.A ) );
for( LL i = 1; i <= 2 * n; ++i ) E.A[ i ][ i ] = 1;
for( ; k; k >>= 1, A = A * A )
if( k & 1 ) E = E * A;
for( LL i = 1; i <= n; ++i ) E.A[ i ][ i + n ] = ( E.A[ i ][ i + n ] + m - 1 ) % m;
for( LL i = 1; i <= n; ++i ) {
for( LL j = 1; j <= n; ++j ) printf( "%lld ", E.A[ i ][ j + n ] );
printf( "\n" );
}
return 0;
}

POJ3233 [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. POJ3233 Matrix Power Series 矩阵乘法

    http://poj.org/problem?id=3233 挺有意思的..学习到结构体作为变量的转移, 题意 : 给定矩阵A,求A + A^2 + A^3 + ... + A^k的结果(两个矩阵相加 ...

  3. POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵

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

  4. poj3233Matrix Power Series(矩阵乘法)

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

  5. C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速

    Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...

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

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

  7. POJ 3233:Matrix Power Series 矩阵快速幂 乘积

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

  8. POJ3233:Matrix Power Series(矩阵快速幂+二分)

    http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...

  9. POJ3233 Matrix Power Series(矩阵快速幂+分治)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

随机推荐

  1. 友善的树形DP

    一棵树,如果有序点对(x,y)之间路径的长度取模于3==0,那么ans0便加上这个长度: 如果取模于3==1,那么ans1便加上这个长度: 如果取模于3==2,那么ans2便加上这个长度: 让你求an ...

  2. c++ 【递归算法】梵塔问题

    一道递归水题,2话不说,直接放代码: #include<iostream> using namespace std; int k; void move(int m,char a,char ...

  3. centos 7 源码安装 mysql 5.6

    下载 mysql 安装包 $ wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.44.tar.gz # or $ curl -O ht ...

  4. Java重要类之LinkedList

    一.ArrayList与LinkedList 基本概念:List是一个接口,Arraylist和LinkedList是它的两个实现类,只是实现的方式不一样.我在“单链表java实现”一文中已经对单链表 ...

  5. echarts-迁徙图地点图标颜色修改

    引用:https://gallery.echartsjs.com/editor.html?c=xLSy9AUmlA var uploadedDataURL = "/asset/get/s/d ...

  6. cube-ui indexList的正确使用

    demo地址:https://github.com/zphtown/cube-ui-bug 上拉和下拉核心代码: onPullingDown () { this.isNoMore = false th ...

  7. TableView 键盘弹起冲突

    1.TableView 上cell 带有 TextField,如果 是Plain 形式的TableView ,并且设置SectionHeader的 取消粘滞效果 会导致键盘弹起,页面不能正常 上移 问 ...

  8. Raspbian 2019-06-20 发布

    有关新Raspbian的信息是作为今天博客文章的一部分提供的,该帖子宣布了全新的Raspberry Pi 4: 为了支持Raspberry Pi 4,我们发布了一个全新的操作系统,基于即将发布的Deb ...

  9. 你在和脚本谈恋爱(自动化在IM聊天中的应用)

    谢谢打开这篇文章的每个你 测开之分层自动化(Python)招生简章 Python自动化测试报告美化 在python中进行数据驱动测试 太嚣张了!他竟用Python绕过了“验证码” 在网络世界里你不知道 ...

  10. log4net 报错

    之前在网上学习了一种log4net的日志监控,这种方式我觉得很不错,至少我个人认为很好,但是最紧缺发现一个为题,就是再session过期的时候页面跳转时候 会报错,这个搞了很久没搞明白,我直接用例子讲 ...