标签:题目 空间 hint 原理 基础 cout turn nbsp 快速幂
1 #include<iostream> 2 #include<cstdio> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<vector> 6 using namespace std; 7 typedef vector<int> v; 8 typedef vector<v>mat; 9 int n, m; 10 11 12 //。。。以前做过的题目,现在又差不多忘光了吧。。。主要是忘记了vector的用法 13 //vector还是要好好学一学, vector<int> v 定义一个叫v的存储整型的向量,用vector定义二维数组(矩阵的方法) vector<v> mat; 14 //若要在定义一个向量矩阵的时候给它分配指定的空间大小的话,用 vector<vector<int> >mat(n, vector<int>(m)) 则行为n,列为m 15 16 mat MAT(mat &a, mat &b){ 17 mat c(a.size(), v(b[0].size())); 18 //c.resize(n); 19 for(int i=0; i<n; i++){ 20 for(int j=0; j<n; j++){ 21 c[i][j]=0; 22 } 23 } 24 for(int i=0; i<n; i++){ 25 for(int j=0; j<n; j++){ 26 for(int k=0; k<n; k++){ 27 c[i][j] += a[i][k] * b[k][j]; 28 } 29 } 30 } 31 return c; 32 } 33 mat MATRIX(mat a, int b){ 34 mat ans(n, v(n)); 35 for(int i=0; i<n; i++){ 36 ans[i][i] = 1; 37 } 38 while(b>0){ 39 if(b&1) ans = MAT(ans, a); 40 a = MAT(a, a); 41 b >>= 1; 42 } 43 return ans; 44 } 45 int main(){ 46 cin >> n >> m; 47 mat a(n, v(n)); 48 mat ans(n, v(n)); 49 for(int i = 0; i < n; i++){ 50 for(int j = 0; j < n; j++){ 51 int x; 52 cin >> x; 53 a[i][j] = x; 54 } 55 } 56 ans = MATRIX(a, m); 57 for(int i=0; i<n; i++){ 58 for(int j=0; j<n; j++){ 59 cout << ans[i][j] << " "; 60 } 61 cout << endl; 62 } 63 return 0; 64 }
标签:题目 空间 hint 原理 基础 cout turn nbsp 快速幂
原文地址:http://www.cnblogs.com/ledoc/p/7087130.html