S = A + A^2 + A^3 + … + A^k A是一个n*n矩阵

Sample Input

2 2 4 //n k MOD
0 1
1 1
Sample Output

1 2
2 3

先求 I + A + A^2 + A^3 + … + A^k  I为单位矩阵

我们来设置这样一个矩阵 B=
A I
O I
其中O是零矩阵,I是单位矩阵

将它乘方,得到
A^2 I+A
O I
乘三方,得到
A^3 I+A+A^2
O I
乘四方,得到
A^4 I+A+A^2+A^3
O I

然后B^(k+1) 的右上小矩阵 就是 I + A + A^2 + A^3 + … + A^k

记得 数组开大一点...因为要扩展成2n*2n的矩阵, 第一次开小了,数组越界=.=

 # include <iostream>
# include <cstdio>
# include <algorithm>
# include <cmath>
# define LL long long
using namespace std ; int MOD ;
int n ; struct Matrix
{
LL mat[][];
}; Matrix mul(Matrix a,Matrix b)
{
Matrix c;
for(int i=;i<*n;i++)
for(int j=;j<*n;j++)
{
c.mat[i][j]=;
for(int k=;k<*n;k++)
{
c.mat[i][j]=(c.mat[i][j] + a.mat[i][k]*b.mat[k][j])%MOD;
}
}
return c;
}
Matrix pow_M(Matrix a,int k )
{
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for (int i=;i<*n;i++)
ans.mat[i][i]=;
Matrix temp=a;
while(k)
{
if(k&)ans=mul(ans,temp);
temp=mul(temp,temp);
k>>=;
}
return ans;
} int main ()
{
//freopen("in.txt","r",stdin) ;
int k ;
while(cin>>n>>k>>MOD)
{
Matrix A ;
int i , j ;
for (i = ; i < n ; i++)
for (j = ; j < n ; j++)
cin>>A.mat[i][j] ;
Matrix B ;
memset(B.mat,,sizeof(B.mat));
for (i = ; i < n ; i++) //扩展成2n * 2n的矩阵
{
for (j = ; j < n ; j++)
{
B.mat[i][j] = A.mat[i][j] ;
}
B.mat[n+i][n+i] = ;
B.mat[i][n+i] = ; }
B = pow_M(B,k+) ;
LL t ;
for (i = ; i < n ; i++)
for (j = ; j < n ; j++)
{
t = B.mat[i][n+j] % MOD ;
if (i == j)
t = (t + MOD - )%MOD ;
if (j+ != n)
cout<<t<<" " ;
else
cout<<t<<endl ;
} } return ;
}

poj 3233 S = A + A^2 + A^3 + … + A^k A是一个n X n矩阵 (矩阵快速幂)的更多相关文章

  1. Poj 3233 Matrix Power Series(矩阵二分快速幂)

    题目链接:http://poj.org/problem?id=3233 解题报告:输入一个边长为n的矩阵A,然后输入一个k,要你求A + A^2 + A^3 + A^4 + A^5.......A^k ...

  2. 矩阵儿快速幂 - POJ 3233 矩阵力量系列

    不要管上面的标题的bug 那是幂的意思,不是力量... POJ 3233 Matrix Power Series 描述 Given a n × n matrix A and a positive in ...

  3. POJ 3233 Matrix Power Series (矩阵+二分+二分)

    题目地址:http://poj.org/problem?id=3233 题意:给你一个矩阵A,让你求A+A^2+……+A^k模p的矩阵值 题解:我们知道求A^n我们可以用二分-矩阵快速幂来求,而 当k ...

  4. POJ 3233 Matrix Power Series(矩阵高速功率+二分法)

    职务地址:POJ 3233 题目大意:给定矩阵A,求A + A^2 + A^3 + - + A^k的结果(两个矩阵相加就是相应位置分别相加).输出的数据mod m. k<=10^9.     这 ...

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

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

  6. poj 3233 Matrix Power Series 矩阵求和

    http://poj.org/problem?id=3233 题解 矩阵快速幂+二分等比数列求和 AC代码 #include <stdio.h> #include <math.h&g ...

  7. 矩阵十点【两】 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的迹(就是主对角线上各项的 ...

  8. poj 3233 矩阵快速幂

    地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方  结果模m的相加和是多少 Given a n × n matrix A and a positive i ...

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

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

随机推荐

  1. 使用JavaScript修改浏览器URL地址栏的实现代码【转】

    引用自http://www.jb51.net/article/42240.htm 现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起 ...

  2. Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐藏层神经网络的平面数据分类)

    Planar data classification with one hidden layer 你会学习到如何: 用单隐层实现一个二分类神经网络 使用一个非线性激励函数,如 tanh 计算交叉熵的损 ...

  3. 流媒体技术学习笔记之(二)RTMP和HLS分发服务器nginx.conmf配置文件(解决了,只能播放RTMP流而不能够播放HLS流的原因)

    user www www; worker_processes ; error_log logs/error.log debug; #pid logs/nginx.pid; events { worke ...

  4. 关于Meta标签的一些知识

    1.定义文档的编码格式(H5的标准写法) <meta charset="UTF-8"> 2.声明指定的浏览器以及版本 <meta http-equiv=" ...

  5. PB9.0数据窗口入门

    因为工作的关系,最近公司用PB比较多,至少10年没用过PB了,回顾一下数据窗口使用方法.1.代码结构 2.数据窗口 3.代码窗口代码 APP入口代码 4.需要使用DataBase插入一条数据 5.执行 ...

  6. VS2013中修改MFC对话框左上角和exe图标

    一.开发环境 1.VS2013: 2.C++ / MFC: 二.更改步骤 1)创建一个新工程,可以什么都不加.打开“资源视图”, 右键点击项目名称,选择“添加资源”,导入“Icon”资源文件(事先准备 ...

  7. mysql 原理~ index的详解

    一 简介:今天咱们来介绍下index的一些东西 二 数据的基本存储结构 1 磁盘空间被划分为许多大小相同的块(Block) 在内存中读出是页(Page).   2 一个表的这些数据块以链表的方式串联在 ...

  8. adb不识别设备(手机)的若干情形及解决方法

    1.执行adb root  提示adb: unable to connect for root: no devices/emulators found:执行adb devices ,List下无设备 ...

  9. wFuzz使用帮助

    ******************************************************** * Wfuzz 2.0 - The Web Bruteforcer * ******* ...

  10. 【黑客免杀攻防】读书笔记8 - 软件逆向工程基础2(if-else,三目运算符)

    0x1 if-else分支 if-else分支4种状态 1.1 以常量为判断条件的简单if-else分支 C源代码: 单层if-else判断,常量为判断条件 int _tmain(int argc, ...