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. Power of Matrix 等比数列求和 矩阵版!

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  2. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection。

    记录下mvc4升级到mvc5后,运行项目提示: “/”应用程序中的服务器错误. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转 ...

  3. java 中public 类

    java 中的文件名是以这个文件里面的public 的那个类命名的(也就是说文件名和这个文件里面的那个public 属性的class 名称一样), 同一个文件中不能放多个(超过2个)的pulic 类. ...

  4. easyui 后台框架搭建

    近期公司要搭建一个后台管理项目.因为美工缺少 选择使用easyui jquery 框架 仅仅要懂点html js 这个用起来不是难事,看过API.在网上看了些 将它们组装起来 进行改动.因为本人也是第 ...

  5. AngularJS入门学习

    初识: {{}}   这种双层花括号的语法称之为:插值语法:也可以说是 标识符:AngularJS 主要就是使用这种方法进行数据绑定 ng-module="name"   在ng的 ...

  6. 玩转CPU之直线

    近期在看编程之美,看到第一个问题时,一下子就被吸引了,原来在windows 的任务管理器中还能够让CPU舞动起来,再一次的相信了编程中仅仅有想不到没有做不到,对于书中的做法和网上的实现大致都同样.只是 ...

  7. 从基于 SQL 的 CURD 操作转移到基于语义 Web 的 CURD 操作

    中文名称 CURD 含义 数据库技术中的缩写词 操作对象 一般的项目开发的各种参数 作用 用于处理数据的基本原子操作     它代表创建(Create).更新(Update).读取(Retrieve) ...

  8. Android showDialog时报错requestFeature() must be called before adding content

    View view = View.inflate(this, R.layout.layout_dialog, null); AlertDialog alertDialog = new AlertDia ...

  9. TextWatcher基本用法

    editText.addTextChangedListener(new TextWatcher() { /** * 内容改变前调用 * 原有的文本s中,从start开始的count个字符将会被一个新的 ...

  10. windowActionModeOverlay

    windowActionModeOverlay: android:windowActionModeOverlay=“true|false”  : actionmode 弹出时覆盖部分布局      若 ...