矩阵快速幂计算和整数快速幂计算相同。在计算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的更多相关文章

  1. (矩阵快速幂)HDU1575 Tr A

    Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. 矩阵快速幂 裸 hdu1575

    裸题,求A^n次后的对角线数字之和 #include<cstdio> #include<algorithm> #include<string.h> using na ...

  3. POJ3070 斐波那契数列递推 矩阵快速幂模板题

    题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include< ...

  4. 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<= ...

  5. 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 ...

  6. 考研路茫茫——单词情结 HDU - 2243 AC自动机 && 矩阵快速幂

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

  7. 矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757

    矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算 ...

  8. HDU 4471 矩阵快速幂 Homework

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...

  9. HDU 2256 Problem of Precision 数论矩阵快速幂

    题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...

随机推荐

  1. leetcode 【 Find Minimum in Rotated Sorted Array II 】python 实现

    题目: Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? W ...

  2. SEO搜索引擎优化基础

    要如何提高自己网站的知名度,那必须了解一些SEO知识. 1.什么是搜索引擎 所谓的搜索引擎(Search  Engines)是一些能够主动搜索信息(搜索网页上的单词和简短的特定的内容描述)并将其自动索 ...

  3. seajs引入jquery

    seajs 2.2.1在config文件中preload一次jquery,就可以在整个项目中使用jquery.如下: seajs.on('exec', function(module) { if (m ...

  4. PyInstaller打包python脚本

    用python写的工具写好了,想打包然后发给测试同事使用,最后选择了PyInstaller,支持Windows.Linux.OS X,支持打包成一个文件夹或单个EXE文件.   我是直接在线安装的,在 ...

  5. java setVisible顺序不同导致窗体内容不显示问题

    今天学习JAVA编写窗体的时候,先写了setVisible(true);然后才去创建的各种控件以及设置大小.位置等 结果运行后只显示空白的窗体,必须最小化再最大化或点击一下边框,才显示窗体内容(即必须 ...

  6. Python-S9-Day89_stark总结

    01 Stark总结 02 ORM总结 03 上节作业 04 Stark组件之查看页面表头 05 list_display_links 06 stark组件之添加页面 07 编辑删除页面 01 Sta ...

  7. Html语言的标签讲解

    一.head头部中的内容: 1.<meta charset="UTF-8"> <--!告诉浏览器什么编码--> 2.<meta http-equiv= ...

  8. 深入学习之mysql(一)数据库操作

    1.显示所有数据库: SHOW DATABASES; 2.创建数据库: CREATE DATABASE 数据库名: 3.选择你所创建的数据库: USE 数据库名; 4.删除数据库: DROP 数据库名 ...

  9. 体验devstack安装openstack

    由于公司制度,工作环境是不能直接上网的,所以在工作时间从没有体验过devstack或者其他联网方式安装openstack. 因自己购置了一台不错的主机,因而决定尝试安装一番,经过一段为期不短的内心极度 ...

  10. BZOJ 2243:染色(树链剖分+区间合并线段树)

    [SDOI2011]染色Description给定一棵有n个节点的无根树和m个操作,操作有2类:1.将节点a到节点b路径上所有点都染成颜色c:2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认 ...