UVA 11149 Power of Matrix 构造矩阵
题目大意:意思就是让求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+A6+······+AK|
|0 E| |0 E |
呵呵········,这种方法wa了好多次,我曾经开始怀疑线性代数老师是不是讲错了。最后在T巨的提醒下发现
然后还有结束标志,还有每个实例后面都有一个换行。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = ;
int n;
struct mat
{
int p[maxn][maxn];
};
mat mul (mat a, mat b)
{
int i, j, k, m;
m = n * ;
mat c;
memset (c.p, , sizeof(c.p));
for (i=; i<m; i++)
for (j=; j<m; j++)
{
for (k=; k<m; k++)
c.p[i][j] += a.p[i][k] * b.p[k][j];
c.p[i][j] = c.p[i][j] % ;
}
return c;
} mat pow (int n, mat a, mat b)
{
while (n)
{
if (n % )
{
b = mul (b, a);
}
n /= ;
a = mul (a, a);
}
return b;
} int main ()
{
int k;
while (scanf ("%d %d", &n, &k))
{
if (!n)
break;
mat a, b;
memset (b.p, , sizeof(b.p));
memset (a.p, , sizeof(a.p)); for (int i=; i<n; i++)
for (int j=; j<n; j++)
{
scanf ("%d", &a.p[i][j]);
a.p[i][j] = a.p[i][j] % ;
} for (int i=; i<n; i++)//构造矩阵,使a矩阵的右上,右下成为单位矩阵,把b也初始化为单位矩阵
a.p[i][i+n] = a.p[i+n][i+n] = b.p[i][i] = b.p[i+n][i+n] = ; b = pow (k+, a, b);
for (int i=; i<n; i++)
for (int j=; j<n; j++)
{
if (i == j)//在b右上角的那个矩阵减去一个单位矩阵
{
b.p[i][j+n] --;
if (b.p[i][j+n] < )//防止出现末尾是零,减去单位矩阵是-1的情况。
b.p[i][j+n] = ;
}
if (j == n-)
printf ("%d\n", b.p[i][j+n]);
else
printf ("%d ", b.p[i][j+n]);
}
printf ("\n");
}
return ;
}
UVA 11149 Power of Matrix 构造矩阵的更多相关文章
- UVA - 11149 Power of Matrix(矩阵倍增)
题意:已知N*N的矩阵A,输出矩阵A + A2 + A3 + . . . + Ak,每个元素只输出最后一个数字. 分析: A + A2 + A3 + . . . + An可整理为下式, 从而可以用lo ...
- 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^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...
- UVa 11149 Power of Matrix(倍增法、矩阵快速幂)
题目链接: 传送门 Power of Matrix Time Limit: 3000MS Description 给一个n阶方阵,求A1+A2+A3+......Ak. 思路 A1+A2+. ...
- UVA 11149 Power of Matrix 快速幂
题目链接: http://acm.hust.edu.cn/vjudge/contest/122094#problem/G Power of Matrix Time Limit:3000MSMemory ...
- UVa 11149 Power of Matrix 矩阵快速幂
题意: 给出一个\(n \times n\)的矩阵\(A\),求\(A+A^2+A^3+ \cdots + A^k\). 分析: 这题是有\(k=0\)的情况,我们一开始先特判一下,直接输出单位矩阵\ ...
- UVA 11149 Power of Matrix
矩阵快速幂. 读入A矩阵之后,马上对A矩阵每一个元素%10,否则会WA..... #include<cstdio> #include<cstring> #include< ...
- UVA 11149.Power of Matrix-矩阵快速幂倍增
Power of Matrix UVA - 11149 代码: #include <cstdio> #include <cstring> #include < ...
- hdu 5015 233 Matrix(构造矩阵)
http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...
随机推荐
- hdu 4057 Rescue the Rabbit
题意 给出n(n<=10)个串,每个串有个权值,然后让你构造一个长度为l(l<=100)的串,如果他包含给出的串就得到相应的权值,求可能得到的最大权值 解法 AC自动机+DP,很显然要建立 ...
- [NPM] Create a new project using the npm init <initializer> command
Historically, the npm init command was solely use to create a new package.json file. However, as of ...
- 从JVM的角度看JAVA代码--代码优化
从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...
- 选带傅里叶变换(zoom-fft)
选带傅里叶变换的原理大家能够看书.大致的步骤为 移频 (将选带的中心频率移动到零频) 数字低通滤波器 (防止频率混叠) 又一次採样 (将採样的数据再次间隔採样,间隔的数据取决于分析的带宽,就是放大 ...
- 基于Spring-SpringMVC-Mybatis的简单样例
复习下 好久没搞过撸过代码了! 这个样例包括一个完整的增删改查! 源代码地址http://download.csdn.net/detail/wangdianyong/8909903
- ReLu(修正线性单元)、sigmoid和tahh的比较
不多说,直接上干货! 最近,在看论文,提及到这个修正线性单元(Rectified linear unit,ReLU). Deep Sparse Rectifier Neural Networks Re ...
- devres in linux driver
写 driver 时, probe 中常常要为设备分配一些资源, 如 内存 / irq / gpio / iomap 等. 而在 probe 中失败时又要小心的释放掉这些资源. 底层驱动开发人员可能会 ...
- JSON序列化-化繁为简
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 前台传JSON到后台
现在,有一个需求,我需要将表格中选中行的数据中的一部分传直接传到控制器中,然后保存到另外一张表中.一开始,我就想到在前台使用ajax构造json数据,然后控制器直接通过list接收. 选中界面中的行, ...
- hdu 1251 统计
他妹的.敲完了.电脑死机了,所有消失了,又从新打了一遍,... 这是什么节奏 #include <stdio.h> #include <string.h> #include & ...