UVa 11149 Power of Matrix(倍增法、矩阵快速幂)
题目链接: 传送门
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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 50;
const int mod = 10;
struct Matrix
{
int mat[50][50];
int r,c;
Matrix(int r1 = 0,int c1 = 0):r(r1),c(c1)
{
memset(mat,0,sizeof(mat));
}
void E()
{
memset(mat,0,sizeof(mat));
for (int i = 0;i < r;i++)
{
for (int j = 0;j < c;j++)
{
mat[i][j] = (i == j);
}
}
}
Matrix operator+(const Matrix & m)
{
Matrix res(r,c);
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
res.mat[i][j] = (mat[i][j] + m.mat[i][j])%mod;
}
}
return res;
}
Matrix operator * (const Matrix & m)
{
Matrix res(r,m.c);
for (int i = 0; i < r; i++)
{
for (int j = 0; j < m.c; j++)
{
for (int k = 0; k < c; k++)
{
res.mat[i][j] = (res.mat[i][j] + mat[i][k] * m.mat[k][j])%mod;
}
}
}
return res;
}
void show()
{
for (int i = 0;i < r;i++)
{
bool first = true;
for (int j = 0;j < c;j++)
{
first?printf("%d",mat[i][j]):printf(" %d",mat[i][j]);
first = false;
}
printf("\n");
}
}
};
Matrix pow(Matrix x,int n)
{
Matrix res(x.r,x.c);
res.E();
while (n > 0)
{
if (n&1)
{
res = res * x;
}
x = x * x;
n >>= 1;
}
return res;
}
Matrix sum(Matrix mat,int k)
{
if (k == 1)
{
return mat;
}
Matrix E(mat.r,mat.c);
E.E();
if (k&1)
{
return (E + pow(mat,k/2))*sum(mat,k/2) + pow(mat,k);
}
else
{
return (E + pow(mat,k/2))*sum(mat,k/2);
}
}
int main()
{
int n,k;
while (~scanf("%d%d",&n,&k) && n && k)
{
Matrix Mat(n,n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d",&Mat.mat[i][j]);
Mat.mat[i][j] %= mod;
}
}
if (k == 0)
{
Mat.show();
continue;
}
Mat = sum(Mat,k);
Mat.show();
printf("\n");
}
return 0;
}
UVa 11149 Power of Matrix(倍增法、矩阵快速幂)的更多相关文章
- Power of Matrix(uva11149+矩阵快速幂)
Power of Matrix Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit St ...
- UVA 11149 - Power of Matrix(矩阵乘法)
UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...
- UVA 11149 Power of Matrix
矩阵快速幂. 读入A矩阵之后,马上对A矩阵每一个元素%10,否则会WA..... #include<cstdio> #include<cstring> #include< ...
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】
典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...
- hdu4965 Fast Matrix Calculation (矩阵快速幂 结合律
http://acm.hdu.edu.cn/showproblem.php?pid=4965 2014 Multi-University Training Contest 9 1006 Fast Ma ...
- HDU - 4965 Fast Matrix Calculation 【矩阵快速幂】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4965 题意 给出两个矩阵 一个A: n * k 一个B: k * n C = A * B M = (A ...
- UVA - 10689 Yet another Number Sequence (矩阵快速幂求斐波那契)
题意:已知f(0) = a,f(1) = b,f(n) = f(n − 1) + f(n − 2), n > 1,求f(n)的后m位数. 分析:n最大为109,矩阵快速幂求解,复杂度log2(1 ...
- UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)
题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...
- UVA 11149 Power of Matrix 快速幂
题目链接: http://acm.hust.edu.cn/vjudge/contest/122094#problem/G Power of Matrix Time Limit:3000MSMemory ...
随机推荐
- 二:【nopcommerce系列】Nop的文件结构,引用关系。如何编译打包部署等
如果,你还没先看第一篇,先看看 一:[nopcommerce系列]Nop整体架构的简单介绍,在看nop代码之前,你需要懂哪些东西 如果你确定你已经看完了第一篇,并且真的理解 mvc.和autofac, ...
- Node基础:url查询参数解析之querystring
模块概述 在nodejs中,提供了querystring这个模块,用来做url查询参数的解析,使用非常简单. 模块总共有四个方法,绝大部分时,我们只会用到 .parse(). .stringify() ...
- Android Stduio统计项目的代码行数
android studio统计项目的代码行数的步骤如下: 1)按住Ctrl+Shift+A,在弹出的框输入‘find’,然后选择Find in Path.(或者使用快捷键Ctrl+Shift+F) ...
- Bootstrap系列 -- 6. 列表
一. 普通无序列表 <ul> <li>无序列表项目</li> <li>无序列表项目</li> <li>无序列表项目</li ...
- hiho一下 第六十六周
题目链接:这是一道水爆了的广搜题 #include<iostream> #include<stdio.h> #include<algorithm> #include ...
- 【JQuery】 ajax 无效的JSON基元
[如题]个人理解就是 你向传数据[josn格式]了,但是后台接受确不是json格式的 数据, 贴段代码 var strJson = '{ "usercode": "123 ...
- Linq的TakeWhile误用
where(func<>)返回符合条件的元素 与此相对的skipwhile跳过符合条件的,返回剩下的元素 容易误用的takewhile,与where 不一样,只有当所有元素满足条件时,才返 ...
- C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
转载:http://www.cnblogs.com/kivenhou/archive/2013/02/22/2921954.html 操作List前请设置SPWeb的allowUnsafeUpdate ...
- ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...
- 9.28 Java基本数据类型作业
要求:声明各数据类型变量或常量,赋值并进行输出. 以下为代码: public class SJLX {//公共类 public static void main(String[] args) { // ...