JD 1474:矩阵幂

来源:互联网 发布:怎么更改软件图标 编辑:程序博客网 时间:2024/06/02 23:30

OJ题目:click here~~

题目分析:经典题目,矩阵快速幂。

typedef vector<int> vec ;typedef vector<vec> mat ;int n ;mat mul(mat &A , mat &B){    mat C(n , vec(n)) ;    for(int i = 0;i < n;i++)        for(int j = 0;j < n;j++)        for(int k = 0;k < n;k++)            C[i][j] += A[i][k] * B[k][j] ;    return C ;}mat pow(mat A , int k){    mat B(n , vec(n)) ;    for(int i = 0;i < n;i++)        B[i][i] = 1 ;    while(k > 0){        if(k&1) B = mul(B , A) ;        A = mul(A , A) ;        k >>= 1 ;    }    return B ;}int main(){     int k , T ;     cin >> T ;     while(T--){        scanf("%d%d",&n,&k) ;        mat A(n , vec(n)) ;        for(int i = 0;i < n;i++)        for(int j = 0 ;j < n;j++){            scanf("%d",&A[i][j]) ;        }        A = pow(A, k) ;        for(int i = 0;i < n;i++)        for(int j = 0;j < n;j++){            j == n-1 ? printf("%d\n",A[i][j]) : printf("%d ",A[i][j]) ;        }     }}


0 0
原创粉丝点击