https://vjudge.net/problem/UVA-11149

题意:

输入一个n×n矩阵A,计算A+A^2+A^3+...A^k的值。

思路:

矩阵倍增法。

处理方法如下,一直化简下去直到变成A。

代码如下:

 Matrix solve(Matrix base,int x)
{
if(x==)return base;
Matrix temp=solve(base,x/);
Matrix sum=add(temp,multi(pow(base,x/),temp));
if(x&)
sum=add(pow(base,x),sum);
return sum;
}
 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std; const int maxn=+;
const int MOD=; int n,k; struct Matrix
{
int mat[maxn][maxn];
}base; Matrix multi(Matrix a,Matrix b)
{
Matrix temp;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
{
temp.mat[i][j]=;
for(int k=;k<n;k++)
temp.mat[i][j]=(temp.mat[i][j]+a.mat[i][k]*b.mat[k][j])%MOD;
}
return temp;
} Matrix pow(Matrix a,int x)
{
Matrix res;
memset(res.mat,,sizeof(res.mat));
for(int i=;i<n;i++) res.mat[i][i]=;
while(x)
{
if(x&) res=multi(res,a);
a=multi(a,a);
x>>=;
}
return res;
} Matrix add(Matrix a,Matrix b)
{
Matrix temp;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
temp.mat[i][j]=(a.mat[i][j]+b.mat[i][j])%MOD;
return temp;
} Matrix solve(Matrix base,int x)
{
if(x==)return base;
Matrix temp=solve(base,x/);
Matrix sum=add(temp,multi(pow(base,x/),temp));
if(x&)
sum=add(pow(base,x),sum);
return sum;
} int main()
{
//freopen("D:\\input.txt","r",stdin);
while(~scanf("%d%d",&n,&k) &&n)
{
for(int i=;i<n;i++)
for(int j=;j<n;j++)
{
scanf("%d",&base.mat[i][j]);
base.mat[i][j]%=MOD;
}
Matrix ans=solve(base,k);
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
if(j) printf(" ");
printf("%d",ans.mat[i][j]);
}
printf("\n");
}
printf("\n");
}
return ;
}

UVa 11149 矩阵的幂(矩阵倍增法模板题)的更多相关文章

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

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

  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(矩阵乘法)

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

  4. 2019牛客多校第五场 B - generator 1 矩阵快速幂+十倍增+二进制倍增优化

    B - generator 1 题意 给你\(x_{0}.x_{1}.a.b.b.mod\),根据\(x_{i} = a*x_{i-1} + b*x_{i-2}\)求出\(x_{n}\) 思路 一般看 ...

  5. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  6. [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)

    Cellular Automaton Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 3048   Accepted: 12 ...

  7. POJ 3734 Blocks(矩阵快速幂+矩阵递推式)

    题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 .   设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...

  8. lightoj 1096【矩阵快速幂(作为以后的模板)】

    基础矩阵快速幂何必看题解 #include <bits/stdc++.h> using namespace std; /* 0 1 2 3 4 5 6 7 0 0 0 */ const i ...

  9. 矩阵快速幂/矩阵加速线性数列 By cellur925

    讲快速幂的时候就提到矩阵快速幂了啊,知道是个好东西,但是因为当时太蒟(现在依然)没听懂.现在把它补上. 一.矩阵快速幂 首先我们来说说矩阵.在计算机中,矩阵通常都是用二维数组来存的.矩阵加减法比较简单 ...

随机推荐

  1. python基础-第十三篇-13.1web框架本质

    基础与概念 众所周知,对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 web框架分两类:一类是包括socket和业务逻辑(tornado),另一 ...

  2. HTML容易遗忘内容(二)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> ...

  3. Docker中安装配置Oracle数据库

    本文使用的OS是Ubuntu([16.04.1_server][1])[注:Ubuntu是安装在vmware虚拟机上的]. 其他的Oracle连接工具:[sqldeveloper-4.1.5.21.7 ...

  4. Linux下修改.bash_profile 文件改变PATH变量的值

    Linux中含有两个重要的文件 /etc/profile和$HOME/.bash_profile 每当系统登陆时都要读取这两个文件,用来初始化系统所用到的变量,其中/etc/profile是超级用户所 ...

  5. 等待事件对应的p1,p2,p3含义

    Oracle 10g v$session视图中不同等待事件对应的p1,p2,p3的含义也不同,我们不可能记住所有等待事件对应的p1,p2,p3的含义. 可以通过查询V$EVENT_NAME知道每个等待 ...

  6. [golang note] 函数定义

    普通函数定义 √ golang函数基本组成:关键字func.函数名.参数列表.返回值.函数体和返回语句. • 语法如下 func 函数名(参数列表) (返回值列表) { // 函数体 } • 示例如下 ...

  7. 关于softnet的加密硬件狗 也就是所谓的赛孚耐

    SuperDog-R-2.2.1.iso 上面那个文件就是光盘里面的东西.你买了他们的产品 自然后带着这个玩意. 按照默认路径安装一下. 安装完毕如下图:

  8. mysql数据库从删库到跑路之select单表查询

    一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...

  9. smart基础原理

    1html模板页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  10. Lua 基础总结

    lua 数组下标从 1 开始, 不是 0 lua 逻辑运算符  与 或 非  就是英文  and  or  not local  局部变量 数据类型:lua是一门动态类型语言,变量没有类型,只有值才有 ...