首页 > 代码库 > 51nod1113(矩阵快速幂模板)
51nod1113(矩阵快速幂模板)
题目链接: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 }
51nod1113(矩阵快速幂模板)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。