hdu 1575 Tr A(矩阵快速幂)
今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午。废话不说,入正题。该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了,我直接用个结构体来表示矩阵,确实能省去不少功夫(这里一定要注意用单位矩阵来初次相乘,但不要把它放进构造函数中,我就是在这里卡了好久
)。下面附上代码:
#include<cstdio>
#include<cstring>
const int Mod= ; struct matrix{
int a[][], n;
matrix(int _n){
n =_n;
memset(a,,sizeof(a));
}
void identity(){
for(int i=; i<=n; ++i) //单位矩阵的初始化,切记!
a[i][i]= ; //如果没有这个的话就不能直接相乘了
}
matrix operator *(const matrix m2){
matrix mul(this->n);
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
for(int k=; k<=n; ++k)
mul.a[i][j]= (mul.a[i][j]+ this->a[i][k]*m2.a[k][j]%Mod)% Mod;
return mul;
}
}; matrix quick_mod(matrix &m, int p)
{
matrix ans(m.n);
ans.identity(); // ans一定要为单位矩阵的!
while(p){
if(p&) ans= ans*m;
m= m*m;
p>>=;
}
return ans;
} int main()
{
int t,n,k,i,j;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
matrix m(n);
for(i=; i<=n; ++i)
for(j=; j<=n; ++j)
scanf("%d",&m.a[i][j]);
matrix ans(n);
ans= quick_mod(m,k);
int sum= ;
for(i=; i<=n; ++i)
sum= (sum+ ans.a[i][i])%Mod;
printf("%d\n",sum);
}
return ;
}
hdu 1575 Tr A(矩阵快速幂)的更多相关文章
- HDU.1575 Tr A ( 矩阵快速幂)
HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...
- HDU 1575 Tr A(矩阵高速幂)
题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- hdu 2604 Queuing(矩阵快速幂乘法)
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- HDU 5950 - Recursive sequence - [矩阵快速幂加速递推][2016ACM/ICPC亚洲区沈阳站 Problem C]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with ...
- 2013长春网赛1009 hdu 4767 Bell(矩阵快速幂+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:求集合{1, 2, 3, ..., n}有多少种划分情况bell[n],最后结果bell[ ...
- HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470 Count Time Limit: 6000/3000 MS (Java/Others) ...
- HDU 6395 Sequence 【矩阵快速幂 && 暴力】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 5667 Sequence【矩阵快速幂+费马小定理】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意: Lcomyn 是个很厉害的选手,除了喜欢写17kb+的代码题,偶尔还会写数学题.他找到 ...
随机推荐
- linux终端拖动鼠标总是产生ctrl+c
是因为有道词典,打开有道词典设置,取消勾选取词划词里面的所有框框
- 最全面的Java多线程用法解析
1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable ...
- c# 服务端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Uva 11754 Code Feat
题意概述: 有一个正整数$N$满足$C$个条件,每个条件都形如“它除以$X$的余数在集合$\{Y_1, Y_2, ..., Y_k\}$中”,所有条件中的$X$两两互质, 你的任务是找出最小的S个解. ...
- Java获取某月天数
Java获取某月天数 Calendar cal = new GregorianCalendar(); //或者用Calendar cal = Calendar.getIns ...
- 使用StarUML创建类图
使用StarUML创建类图 http://www.flyne.org/article/379 1.综述(What) StarUML是一种生成类图和其他类型的UML图表的工具.本文是一个使用StarUM ...
- 转Masonry遇到的问题
1,ImageView 圆角: 解决方法如下: https://github.com/SnapKit/Masonry/issues/153 2,iphone4 tableview只显示一半 加了一个 ...
- Bootstrap_表单
表单样式 一.基础表单 <form > <div class="form-group"> <label>邮箱:</label> &l ...
- 【leetcode❤python】70. Climbing Stairs
#Method1:动态规划##当有n个台阶时,可供选择的走法可以分两类:###1,先跨一阶再跨完剩下n-1阶:###2,先跨2阶再跨完剩下n-2阶.###所以n阶的不同走法的数目是n-1阶和n-2阶的 ...
- CodeForces 152C Pocket Book
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...