题意:已知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>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define lowbit(x) (x & (-x))
const double eps = 1e-8;
inline int dcmp(double a, double b){
if(fabs(a - b) < eps) return 0;
return a > b ? 1 : -1;
}
typedef long long LL;
typedef unsigned long long ULL;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 10;
const double pi = acos(-1.0);
const int MAXN = 40 + 10;
const int MAXT = 10000 + 10;
using namespace std;
int n;
struct Matrix{
int r, c, matrix[MAXN][MAXN];
Matrix(int rr, int cc):r(rr), c(cc){
memset(matrix, 0, sizeof matrix);
}
};
Matrix add(Matrix a, Matrix b){
Matrix ans(n, n);
for(int i = 0; i < a.r; ++i){
for(int j = 0; j < a.c; ++j){
ans.matrix[i][j] = ((a.matrix[i][j] % MOD) + (b.matrix[i][j] % MOD)) % MOD;
}
}
return ans;
}
Matrix mul(Matrix a, Matrix b){
Matrix ans(a.r, b.c);
for(int i = 0; i < a.r; ++i){
for(int j = 0; j < b.c; ++j){
for(int k = 0; k < a.c; ++k){
(ans.matrix[i][j] += ((a.matrix[i][k] % MOD) * (b.matrix[k][j] % MOD)) % MOD) %= MOD;
}
}
}
return ans;
}
Matrix QPOW(Matrix a, int k){
Matrix ans(n, n);
for(int i = 0; i < n; ++i){
ans.matrix[i][i] = 1;
}
while(k){
if(k & 1) ans = mul(ans, a);
a = mul(a, a);
k >>= 1;
}
return ans;
}
Matrix solve(Matrix tmp, int k){
if(k == 1) return tmp;
Matrix t = solve(tmp, k >> 1);
Matrix ans = add(t, mul(QPOW(tmp, k >> 1), t));
if(k & 1) ans = add(ans, QPOW(tmp, k));
return ans;
}
int main(){
int k;
while(scanf("%d%d", &n, &k) == 2){
if(n == 0) return 0;
Matrix tmp(n, n);
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
scanf("%d", &tmp.matrix[i][j]);
tmp.matrix[i][j] %= MOD;
}
}
Matrix ans = solve(tmp, k);
for(int i = 0; i < ans.r; ++i){
for(int j = 0; j < ans.c; ++j){
if(j) printf(" ");
printf("%d", ans.matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}

  

UVA - 11149 Power of Matrix(矩阵倍增)的更多相关文章

  1. UVA 11149 - Power of Matrix(矩阵乘法)

    UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...

  2. UVa 11149 Power of Matrix(倍增法、矩阵快速幂)

    题目链接: 传送门 Power of Matrix Time Limit: 3000MS      Description 给一个n阶方阵,求A1+A2+A3+......Ak. 思路 A1+A2+. ...

  3. UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)

    题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...

  4. UVa 11149 Power of Matrix 矩阵快速幂

    题意: 给出一个\(n \times n\)的矩阵\(A\),求\(A+A^2+A^3+ \cdots + A^k\). 分析: 这题是有\(k=0\)的情况,我们一开始先特判一下,直接输出单位矩阵\ ...

  5. UVA 11149 Power of Matrix 快速幂

    题目链接: http://acm.hust.edu.cn/vjudge/contest/122094#problem/G Power of Matrix Time Limit:3000MSMemory ...

  6. UVA 11149 Power of Matrix 构造矩阵

    题目大意:意思就是让求A(A是矩阵)+A2+A3+A4+A5+A6+······+AK,其中矩阵范围n<=40,k<=1000000. 解题思路:由于k的取值范围很大,所以很自然地想到了二 ...

  7. UVA 11149 Power of Matrix

    矩阵快速幂. 读入A矩阵之后,马上对A矩阵每一个元素%10,否则会WA..... #include<cstdio> #include<cstring> #include< ...

  8. UVA11149 Power of Matrix —— 矩阵倍增、矩阵快速幂

    题目链接:https://vjudge.net/problem/UVA-11149 题意: 给出矩阵A,求出A^1 + A^2 …… + A^k . 题解: 1.可知:A^1 + A^2 …… + A ...

  9. UVA 11149.Power of Matrix-矩阵快速幂倍增

    Power of Matrix UVA - 11149       代码: #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. java、mysql、oracle、pgsql数据类型对应关系

    看不清 请 Ctrl+鼠标滚轮     放大页面

  2. pug

    https://github.com/pugjs/pug pug模板使用https://www.cnblogs.com/gudi/p/8080736.html

  3. H.264 SODB RBSP EBSP的区别

    SODB(String of Data Bits,数据比特串): 最原始,未经过处理的编码数据 RBSP(Raw Byte Sequence Payload,原始字节序列载荷): 在SODB的后面填加 ...

  4. Python栈溢出【新手必学】

    python3.5.4 递归函数最恶心的时候莫非栈溢出(Stack overflow).PS:另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个P ...

  5. Lesson 45 Of men and galaxies

    In man's early days, competition with other creatures must have been critical. But this phase of our ...

  6. Lua 完美打印数据 (例子)

    例子1 : ableprint = function(data,cstring,deepIndex) --第二个参数可以为空,第三个参数不要手动添加,它是用来进行打印深度控制的. if data == ...

  7. spring mvc 的@PathVariable对应中文乱码解决办法

    参考:https://www.aliyun.com/jiaocheng/800577.html

  8. 解决Google浏览器不能打开kubernetes dashboard方法【转】

    在这片文章中,我将展示如何在Google Chrome上打开kubernetes dashboard.本文不叙述如何安装搭建docker和kubernetes,有关详情请上网查阅! 很多小伙伴们在自己 ...

  9. day06-Python运维开发基础(字符串格式化与相关的函数、列表相关的操作)

    1. 字符串相关的操作与格式化 # ### 字符串相关操作 # (1)字符串的拼接 + var1 = "亲爱的," var2 = "男孩" res = var1 ...

  10. R 《回归分析与线性统计模型》page119,4.2

    rm(list = ls()) library(openxlsx) library(MASS) data = read.xlsx("xiti_4.xlsx",sheet = 2) ...