1. 程式人生 > >51nod1113(矩陣快速冪模板)

51nod1113(矩陣快速冪模板)

matrix mod aps amp alt for question class color

題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113

題意:中文題誒~

思路:矩陣快速冪模板

代碼:

技術分享
 1 #include <iostream>
 2 #define ll long long
 3 using namespace std;
 4 
 5 const int mod = 1e9+7;
 6 const int MAXN = 1e2+10;
 7 int n, m;
 8 
 9 typedef struct node{
10     ll x[MAXN][MAXN];
11
}matrix; 12 13 matrix matrix_multi(matrix a, matrix b){ 14 matrix c; 15 for(int i=0; i<n; i++){ 16 for(int j=0; j<n; j++){ 17 ll cnt=0; 18 for(int k=0; k<n; k++){ 19 cnt += a.x[i][k]*b.x[k][j]; 20 if(cnt >= mod) cnt %= mod;
21 } 22 c.x[i][j] = cnt; 23 } 24 } 25 return c; 26 } 27 28 matrix get_pow(matrix tmp, int m){ 29 matrix ans; 30 for(int i=0; i<n; i++){ 31 for(int j=0; j<n; j++){ 32 if(i==j) ans.x[i][j] = 1; 33 } 34 } 35 while(m){
36 if(m&1) ans = matrix_multi(ans, tmp); 37 tmp = matrix_multi(tmp, tmp); 38 m >>= 1; 39 } 40 return ans; 41 } 42 43 int main(void){ 44 matrix cnt; 45 cin >> n >> m; 46 for(int i=0; i<n; i++){ 47 for(int j=0; j<n; j++){ 48 cin >> cnt.x[i][j]; 49 } 50 } 51 matrix tmp = get_pow(cnt, m); 52 for(int i=0; i<n; i++){ 53 for(int j=0; j<n; j++){ 54 cout << tmp.x[i][j] << " "; 55 } 56 cout << endl; 57 } 58 return 0; 59 }
View Code

51nod1113(矩陣快速冪模板)