Problem Description

A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。

Input

数据的第一行是一个T,表示有T组数据。每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。

Output

对应每组数据,输出Tr(A^k)%9973。

Sample Input

2
2 2
1 0
0 1
3 99999999
1 2 3
4 5 6
7 8 9

Sample Output

2
2686
解题思路:简单的矩阵快速幂。矩阵快速幂中初始化的矩阵就等同于普通快速幂初始化的1,这就是单位矩阵B,性质:B*A=A,即一开始若二进制最低位为1时,要先与初始的矩阵a相乘可得到a原矩阵,这和普通快速幂是一样的,就是1*a=a。单位矩阵就是主对角线都是1,其他全是0,以后当循环到二进制的最低位为1,矩阵b就和此时的矩阵('a')相乘即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int mod=;
const int maxn=;
struct Matrix{int m[maxn][maxn];}init;
int t,n,k;
Matrix mul(Matrix a,Matrix b){
Matrix c;
for(int i=;i<n;i++){//枚举第一个矩阵的行。
for(int j=;j<n;j++){//枚举第二个矩阵的列。
c.m[i][j]=;
for(int k=;k<n;k++)//枚举第一个矩阵的列数
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
}
}
return c;
}
Matrix POW(Matrix a,int x){//矩阵快速幂模仿一般快速幂,x为幂指数
Matrix b;memset(b.m,,sizeof(b.m));//先初始化为0,再构造单位矩阵
for(int i=;i<n;++i)b.m[i][i]=;
while(x){
if(x&)b=mul(b,a);//如果x的二进制最低位为1,则乘上A^(2^i)
a=mul(a,a);//将矩阵a平方
x>>=;
}
return b;
}
int main(){
while(cin>>t){
while(t--){
cin>>n>>k;
for(int i=;i<n;++i)
for(int j=;j<n;++j)
cin>>init.m[i][j];
Matrix res=POW(init,k);//矩阵快速幂取模运算
int ans=;
for(int i=;i<n;++i)//主对角线上各项的和
ans=(ans+res.m[i][i])%mod;
cout<<ans<<endl;
}
}
return ;
}

题解报告:hdu 1575 Tr A的更多相关文章

  1. HDU.1575 Tr A ( 矩阵快速幂)

    HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...

  2. hdu 1575 Tr A

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和), ...

  3. HDU 1575 Tr A 【矩阵经典2 矩阵快速幂入门】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Me ...

  4. HDU 1575 Tr A(矩阵高速幂)

    题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...

  5. hdu 1575 Tr A(矩阵快速幂乘法优化算法)

    Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n ...

  6. HDU 1575 Tr A----矩阵相乘题。

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

  7. hdu 1575 Tr A (二分矩阵)

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

  8. hdu 1575 Tr A(矩阵高速电源输入)

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

  9. hdu 1575 Tr A(矩阵快速幂)

    今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午.废话不说,入正题.该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了 ...

随机推荐

  1. Unity常用常找(二)

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51315050 作者:car ...

  2. h5dnd sortable mutil groups

    h5dnd sortable mutil groups https://codepen.io/webgeeker/pen/JmPXaN https://codepen.io/webgeeker/pen ...

  3. Luca Canali

    https://github.com/LucaCanali http://cern.ch/canali/

  4. 时间插件,js格式化,js某月天数,js某月最后一天日期

    //时间格式化 Date.prototype.format = function(fmt) { var o = { "M+": this.getMonth() + 1, //月份 ...

  5. GNS3 使用SecureCRT

    "D:\SecureCRT\SecureCRT.EXE" /SCRIPT D:\SecureCRT\DyRouter.vbs /ARG %d /T /TELNET %h %p st ...

  6. namenode启动成功,但是不能通过web访问50070问题

    我在CentOS遇到这个问题,50070不行但8088可以,尝试了各种方法无法解决,各个进程全都启动,格式化namenode,各种配置正常均无法解决.后来觉得是默认访问端口没有生效,所以尝试添加端口配 ...

  7. [Vue +TS] Use Two-Way Binding in Vue Using @Model Decorator with TypeScript

    Vue models, v-model, allow us to use two-way data binding, which is useful in some cases such as for ...

  8. [JavaEE] Implement a test for REST endpoint

    1. We have the BookEndpoint.java: package com.pluralsight.bookstore.rest; import com.pluralsight.boo ...

  9. [vs执行报错] CRT detected that the application wrote to memory after end of heap buffer

    CRT 是c/c++ run-time lib , 是程序执行时所需的核心库. 这个错误是由于以对内在操作的过程中.所写的地址超出了.所分配内在的边界 有个建议是: 1.内存申请多少释放多少,释放掉你 ...

  10. Codeforces Round #263 (Div. 1)-A,B,C

    A: 这道题目还是非常easy的,做过非常多遍了.相似于分割木板的问题. 把全部的数放在一个优先队列里,弹出两个最大的,然后合并,把结果放进去.依次进行. #include <iostream& ...