解题思路

题目里要求\(\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. 说一下redis中5种数据类型的底层数据结构

      前言: 阅读 redis设计与实现 一书的记录.未完待续... redis我们都知道有5种数据类型,分别是string,list,hash,set,zset,那么你知道它们的底层数据结构实现吗? ...

  2. Java中的异常处理try catch(第八周课堂示例总结)

    异常处理 使用Java异常处理机制: 把可能会发生错误的代码放进try语句块中. 当程序检测到出现了一个错误时会抛出一个异常对象. 异常处理代码会捕获并处理这个错误. catch语句块中的代码用于处理 ...

  3. Anaconda中安装pytorch

    Anaconda中安装pytorch 创建一个虚拟环境 conda create --name machinelearning python=3.7 激活虚拟环境 activate machinele ...

  4. L2-014. 列车调度(Dilworth定理)

    火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...

  5. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  6. Linux内核、mysql内核、Tcp/Ip内核、java等知识书籍

    LINUX <linux内核设计与实现>(2011年出版,链接:https://pan.baidu.com/s/107hriLNVt05A8egeU8Du-g  密码:0cgn) < ...

  7. Task的取消

    原文:.NET 4 并行(多核)编程系列之三 从Task的取消 .NET 4 并行(多核)编程系列之三 从Task的取消 前言:因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并行编程 ...

  8. debezium关于cdc的使用(下)

    博文原址:debezium关于cdc的使用(下) 简介 debezium在debezium关于cdc的使用(上)中有做介绍.具体可以跳到上文查看.本篇主要讲述使用kafka connector方式来同 ...

  9. Vue自定义组件以及组件通信的几种方式

    本帖子来源:小贤笔记 功能 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它 ...

  10. 为SourceInsight添加多行注释功能菜单

    由于项目看代码主要使用的是Source Insight,习惯了其他编辑器的多行注释功能,对此感到很不习惯,查询网上程序,可以自行添加. 1.打开project,选择base项目中的utils.em,添 ...