hdoj1575 Tr A(矩阵快速幂)

简单的矩阵快速幂。最后求矩阵的秩。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int Mod=9973;
 5 int n,k;
 6 struct mat{
 7     int a[15][15];
 8 };
 9 mat res,c;
10 mat mat_mul(mat x,mat y){
11     mat ans;
12     memset(ans.a,0,sizeof(ans.a));
13     for (int i=0;i<n;i++)
14         for (int j=0;j<n;j++)
15         for (int k=0;k<n;k++){
16             ans.a[i][j]+=x.a[i][k]*y.a[k][j];
17             ans.a[i][j]%=Mod;
18         }
19      return ans;     
20 }
21 int mat_pow(int n,int k){
22     for (int i=0;i<n;i++){
23         for (int j=0;j<n;j++){
24             cin >> res.a[i][j];
25         }
26     }
27     c=res;
28     k--;
29     while (k){
30         if (k&1) res=mat_mul(res,c);
31         c=mat_mul(c,c);
32         k>>=1;
33     }
34     int ans=0;
35     for (int i=0;i<n;i++){
36         ans=(ans+res.a[i][i])%Mod;
37     }
38     return ans;
39 }
40 int main(){
41     int t;
42     cin >> t;
43     while (t--){
44         cin >> n >> k;
45         cout << mat_pow(n,k) << endl;
46     }
47     return 0;
48 }

 

转载于:https://www.cnblogs.com/changer-qyz/p/8442796.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值