zoukankan      html  css  js  c++  java
  • hdu 1575 Tr A

    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代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int mod=9973;
     4 const int maxn=15;
     5 struct Matrix{int m[maxn][maxn];}init;
     6 int t,n,k;
     7 Matrix mul(Matrix a,Matrix b){
     8     Matrix c;
     9     for(int i=0;i<n;i++){//枚举第一个矩阵的行。
    10         for(int j=0;j<n;j++){//枚举第二个矩阵的列。
    11             c.m[i][j]=0;
    12             for(int k=0;k<n;k++)//枚举第一个矩阵的列数
    13                 c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
    14         }
    15     }
    16     return c;
    17 }
    18 Matrix POW(Matrix a,int x){//矩阵快速幂模仿一般快速幂,x为幂指数
    19     Matrix b;memset(b.m,0,sizeof(b.m));//先初始化为0,再构造单位矩阵
    20     for(int i=0;i<n;++i)b.m[i][i]=1;
    21     while(x){
    22         if(x&1)b=mul(b,a);//如果x的二进制最低位为1,则乘上A^(2^i)
    23         a=mul(a,a);//将矩阵a平方
    24         x>>=1;
    25     }
    26     return b;
    27 }
    28 int main(){
    29     while(cin>>t){
    30         while(t--){
    31             cin>>n>>k;
    32             for(int i=0;i<n;++i)
    33                 for(int j=0;j<n;++j)
    34                     cin>>init.m[i][j];
    35             Matrix res=POW(init,k);//矩阵快速幂取模运算
    36             int ans=0;
    37             for(int i=0;i<n;++i)//主对角线上各项的和
    38                 ans=(ans+res.m[i][i])%mod;
    39             cout<<ans<<endl;
    40         }
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    React开发入门
    API爬虫--Twitter实战
    网页爬虫--scrapy入门
    爬虫入门(实用向)
    随谈10年的技术生涯和技术成长
    html元素的显示和隐藏
    Ubuntu下用cue文件对ape和wav文件自动分轨
    Bash内置命令exec和重定向
    Bash提示符
    Bash启动选项
  • 原文地址:https://www.cnblogs.com/acgoto/p/9076294.html
Copyright © 2011-2022 走看看