码迷,mamicode.com
首页 > 其他好文 > 详细

51Nod 1113 矩阵快速幂

时间:2018-05-14 19:51:28      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:矩阵   base   nod   for   long   main   ace   color   code   

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 typedef long long ll;
 8 int n, m;
 9 const int maxn = 105;
10 const int MOD = 1e9 + 7;
11 
12 struct node{
13     ll a[maxn][maxn];
14 };
15 
16 node A, ans;
17 
18 node multi(node x, node y){
19     node z;
20     for(int i = 1;i <= n;i++){
21         for(int j = 1;j <= n;j++){
22             z.a[i][j] = 0;
23             for(int k = 1;k <= n;k++){
24                 z.a[i][j] += x.a[i][k]*y.a[k][j]%MOD;
25                 z.a[i][j] %= MOD;
26             }
27         }
28     }
29     return z;
30 }
31 
32 void f(){
33     while(m > 0){
34         if(m%2){
35             //ans = ans*a%MOD;
36             ans = multi(ans, A);
37         }
38         //a = (a*a)%MOD;
39         A = multi(A,A);
40         m /= 2;
41     }
42 }
43 
44 int main(){
45     ios_base::sync_with_stdio(false);
46     cin.tie(0);
47     cin >> n >> m;
48     for(int i = 1;i <= n;i++){
49         for(int j = 1;j <= n;j++){
50             cin >> A.a[i][j];
51             ans.a[i][j] = A.a[i][j];
52         }
53     }
54     m--;
55     f();
56     for(int  i = 1;i <= n;i++){
57         for(int j = 1;j<=n;j++)
58         {
59             if(j == 1){
60                 cout << ans.a[i][j];
61             }
62             else{
63                 cout << " " << ans.a[i][j];
64             }
65         }
66         cout << endl;
67     }
68     return 0;
69 }

 

51Nod 1113 矩阵快速幂

标签:矩阵   base   nod   for   long   main   ace   color   code   

原文地址:https://www.cnblogs.com/jaydenouyang/p/9037682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!