矩阵快速幂计算hdu1575
矩阵快速幂计算和整数快速幂计算相同。在计算A^7时,7的二进制为111,从而A^7=A^(1+2+4)=A*A^2*A^4.而A^2可以由A*A得到,A^4可以由A^2*A^2得到。计算两个n阶方阵的乘积复杂度为O(n^3)。k的二进制大约有logk位,总的复杂度为O(n^3*logk).
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<queue>
#include<iomanip>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
const int MOD = ;
class Matrix{
int n;
int M[][];
Matrix Matrix::operator*(Matrix& X); //矩阵乘法
public:
void input(int i, int j, int m){ M[i][j] = m; }
Matrix(int n); //初始化
int trSum(); //计算矩阵迹
Matrix quickPower(int k);//矩阵快速幂
};
Matrix::Matrix(int n){
this->n = n;
int i, j;
for (i = ; i <= n; i++)
for (j = ; j <= n; j++)
M[i][j] = (i == j ? : );
} Matrix Matrix::operator*(Matrix& X){
Matrix res(n);
int i, j, k, ans;
for (i = ; i <= n; i++)
for (j = ; j <= n; j++){
ans = ;
for (k = ; k <= n; k++)
ans += M[i][k] * X.M[k][j];
res.M[i][j] = ans%MOD;
}
res.n = n;
return res;
} int Matrix::trSum(){
int res = , i;
for (i = ; i <= n; i++)
res += M[i][i];
return res%MOD;
} Matrix Matrix::quickPower(int k){
Matrix Y(n);
Matrix X = *this;
while (k){
if (k & )
Y = Y*X;
k >>= ;
X = X*X;
}
return Y;
} int main(){
int i, j, T, k, n,ans;
scanf("%d", &T);
while (T--){
scanf("%d%d", &n,&k);
Matrix X(n);
for (i = ; i <= n;i++)
for (j = ; j <= n; j++){
scanf("%d", &ans);
X.input(i, j, ans);
}
X = X.quickPower(k);
printf("%ld\n",X.trSum());
}
return ;
}
矩阵快速幂计算hdu1575的更多相关文章
- (矩阵快速幂)HDU1575 Tr A
Tr A Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 矩阵快速幂 裸 hdu1575
裸题,求A^n次后的对角线数字之和 #include<cstdio> #include<algorithm> #include<string.h> using na ...
- POJ3070 斐波那契数列递推 矩阵快速幂模板题
题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include< ...
- 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)
题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...
- 2020牛客寒假算法基础集训营1 J. 缪斯的影响力 (矩阵快速幂/费马小定理降幂)
https://ac.nowcoder.com/acm/problem/200658 f(n) = f(n-1) * f(n-2) * ab ,f的第一项是x,第二项是y. 试着推出第三项是x·y·a ...
- 考研路茫茫——单词情结 HDU - 2243 AC自动机 && 矩阵快速幂
背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...
- 矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757
矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算 ...
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
- HDU 2256 Problem of Precision 数论矩阵快速幂
题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...
随机推荐
- 【Combinations】cpp
题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...
- 使用bat命令实现拖动快速安装APK包
平时安装APK包,每次都要打命令adb install *********** 很繁琐,网上找到一个用BAT命令快速安装的方法 在桌面创建一个bat文件,输入: @echo off title i ...
- Windows下Eclipse安装PyDev
事后证明PyDev不好用,推荐使用pycharm!!! 1.安装eclipse,这个网上一大堆,就不说了 2.安装python,这个网上一大堆,就不说了 3.Eclipse安装PyDev 第一种在 ...
- 非常全面的vim配置文件
1.mac下vim全局配置目录 /usr/share/vim/vimrc 一般不对此文件做修改,在用户目录下创建自定义配置,目录为: /Users/xxxxx cd ~ 2自定义vim配置 配置功能: ...
- 整理 pycharm console调试博客
在Debug模式下,查看变量发现只能看到300个变量,报错: two large to show contents. Max items to show:300. 点击Debugger左侧consol ...
- sqlserver创建存储过程返回table
--创建存储过程test create procedure [dbo].[test] ( @I_MTR NVARCHAR (MAX), @I_TYPE NVARCHAR (MAX), @I_FAC N ...
- angular2多组件通信流程图
知识点1:组件属性的双向绑定,需要在属性+Change 作为Output方法返回即可. 知识点2:更新子组件的值,不会引起output触发,父组件不会更新绑定的值 知识点3:属性的双向绑定,只会子组件 ...
- OOP & DOM
OOP & DOM let Dom = Dom || {}; Dom = { checkValType(val) { let typeString = Object.prototype.toS ...
- 关于JavaWeb开发的一些感悟
从事JavaWeb的开发已经三年了,从最开始的啥都不会,到慢慢的能够独立做项目,从一开始的一片茫然,到现在的心中有数.对于技术.业务也有了自己的看法. JavaWeb开发所涉及到的知识点非常多,涉及到 ...
- 查看端口被占用并结束进程 mac