UVA 11149 Power of Matrix 快速幂】的更多相关文章

题目链接: http://acm.hust.edu.cn/vjudge/contest/122094#problem/G Power of Matrix Time Limit:3000MSMemory Limit:0KB 问题描述 给你一个矩阵A,求A+A^2+A^3+...+A^k 输入 Input consists of no more than 20 test cases. The first line for each case contains two positive integer…
UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: #include <cstdio> #include <cstring> const int N = 45; int n, k; struct mat { int v[N][N]; mat() {memset(v, 0, sizeof(v));} mat operator * (ma…
题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))(A + A^2 + A^3 + ... + A^(m/2)),然后依次计算下去,就可以分解,logn的复杂度分解,注意要分奇偶. 另一种是直接构造矩阵,,然后就可以用辞阵快速幂计算了,注意要用分块矩阵的乘法. 代码如下: 倍增法: #pragma comment(linker, "/STACK:10…
题目链接: 传送门 Power of Matrix Time Limit: 3000MS      Description 给一个n阶方阵,求A1+A2+A3+......Ak. 思路 A1+A2+...+An = (A1+A2+...+An/2)+(A1+A2+...+An/2) * An/2 = (1 + An/2 ) * (A1+A2+...+An/2)那么对于 (A1+A2+...+An/2)也能用同样的方法去求,不断对半下去计算,最后总体复杂度为log(n)^2 #include<io…
矩阵快速幂. 读入A矩阵之后,马上对A矩阵每一个元素%10,否则会WA..... #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; ; int n,m; struct Matrix { ][]; int R, C; Matrix operator*(Matrix b); }; Ma…
题意: 给出一个\(n \times n\)的矩阵\(A\),求\(A+A^2+A^3+ \cdots + A^k\). 分析: 这题是有\(k=0\)的情况,我们一开始先特判一下,直接输出单位矩阵\(E\). 下面讨论\(k > 0\)的情况: 方法一 设答案为\(S_k(k > 0)\) 把矩阵增广一下 \(\begin{bmatrix} A & O \\ E & E \end{bmatrix} \begin{bmatrix} A^n\\ S_{n-1} \end{bmat…
题意:已知N*N的矩阵A,输出矩阵A + A2 + A3 + . . . + Ak,每个元素只输出最后一个数字. 分析: A + A2 + A3 + . . . + An可整理为下式, 从而可以用log2(n)的复杂度算出结果. 注意:输入时把矩阵A的每个元素对10取余,因为若不处理,会导致k为1的时候结果出错. #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #in…
题目大意:意思就是让求A(A是矩阵)+A2+A3+A4+A5+A6+······+AK,其中矩阵范围n<=40,k<=1000000. 解题思路:由于k的取值范围很大,所以很自然地想到了二分法,用递归逐步将k二分(公式:A+A2+A3+A4+A5+A6 = A+A2+A3 + A3(A+A2+A3)), 这种方法只需要注意k是奇数的情况就可以了. 最坑的是第二种方法,根据矩阵的性质可以构造出来一个子矩阵,假如有矩阵B=|A  E| ,那么BK =|AK   E+ A+A2+A3+A4+A5+A…
Power of Matrix UVA - 11149       代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 44 #define mod 10 int n; struct matrix{ int f[maxn][maxn]; }; matrix sum(matrix a…
Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 18450   Accepted: 7802 Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + - + Ak. Input The input contains exactly one test cas…