zoukankan      html  css  js  c++  java
  • P3390 【模板】矩阵快速幂

    题目背景

    矩阵快速幂

    题目描述

    给定n*n的矩阵A,求A^k

    输入输出格式

    输入格式:

    第一行,n,k

    第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素

    输出格式:

    输出A^k

    共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7

    输入输出样例

    输入样例#1:
    2 1
    1 1
    1 1
    输出样例#1:
    1 1
    1 1

    说明

    n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂

      记住矩阵的运算方法就行。

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<math.h>
    #include<cstdio>
    using namespace std;
    #define LL  unsigned long long 
    #define MOD 1000000007
    LL n,k;
    struct node{
        LL v[109][109];
    }p,x,ans,b;
    node ch(node x,node y)
    {
        
        for(int i=1;i<=n;i++)
           for(int j=1;j<=n;j++)
        {    
            p.v[i][j]=0;
            for(int k=1;k<=n;k++)
             p.v[i][j]=(p.v[i][j]+1LL*x.v[i][k]*y.v[k][j] )%MOD;
        }    
        return p;
    }
    void fastlow( )
    {
        while(k)
        {
            if(k%2)    ans=ch(ans,x);
            k/=2; x=ch(x,x);
        }
    } 
    int main()
    {
        scanf("%lld%lld",&n,&k);
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            scanf("%lld",&x.v[i][j]);
        ans=x;k--;
        fastlow();
        for(int i=1;i<=n;i++ ,cout<<endl)
        for(int j=1;j<=n;j++ )
        printf("%lld ",ans.v[i][j]);
        return 0;
    }
  • 相关阅读:
    Halcon 笔记3 形态学
    Halcon 笔记2 Blob分析
    Halcon 笔记1
    线程
    Fn+F1-F12,避免使用FN+
    改变与接受
    PictureBox使用异常
    (一)Knockout
    (二)HTML5
    (一)chrome扩展
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7373630.html
Copyright © 2011-2022 走看看