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

    【模板】矩阵快速幂

    题目背景

    矩阵快速幂

    题目描述

    给定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

    算法:矩阵快速幂

    我今天晚上被这个题搞醉了,欸,无力吐槽,贴个代码就撤

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #define MOD 1000000007
     6 #define LL long long 
     7 using namespace std;
     8 LL a[105][105],b[105][105],c[105][105],k;
     9 int n;
    10 void inti()
    11 {
    12        scanf("%d%lld",&n,&k);
    13     for (int i=1;i<=n;i++) 
    14         for (int j=1;j<=n;j++) scanf("%lld",&a[i][j]);
    15     for (int i=1;i<=n;i++) b[i][i]=1;
    16 }
    17 void hc()
    18 {  
    19     for(LL i=1;i<=n;i++)
    20     for(LL j=1;j<=n;j++)
    21     {
    22           c[i][j]=0;
    23           for(LL k=1;k<=n;k++)
    24            c[i][j]=(c[i][j]+b[i][k]*a[k][j]%MOD)%MOD;
    25       
    26     }
    27     for(LL i=1;i<=n;i++)
    28     for(LL j=1;j<=n;j++)
    29     b[i][j]=c[i][j];
    30 } 
    31 void zc()
    32 {
    33     for(LL i=1;i<=n;i++)
    34     for(LL j=1;j<=n;j++)
    35     {
    36           c[i][j]=0;
    37           for(LL k=1;k<=n;k++)
    38           c[i][j]=(c[i][j]+a[i][k]*a[k][j]%MOD)%MOD;
    39     }
    40     for(LL i=1;i<=n;i++)
    41     for(LL j=1;j<=n;j++)
    42     a[i][j]=c[i][j];
    43 }
    44 void work()
    45 {
    46     while(k)
    47     {
    48         if(k%2==1) hc();
    49         zc();
    50         k=k/2;
    51     }
    52     for(LL i=1;i<=n;i++)
    53     {
    54       for(LL j=1;j<=n;j++)
    55        cout<<b[i][j]<<" "; 
    56       cout<<endl;
    57     }
    58 }
    59 int main()
    60 {
    61     inti();
    62     work();
    63     return 0;
    64 }
    View Code

    以上 By LQ_double

  • 相关阅读:
    2016012056+小学四则运算练习软件项目报告
    《构建之法》1,2,16章读后感
    我与软件
    散列函数的应用及其安全性
    EGener2四则运算出题器
    用jar包运行带GUI的java游戏
    关于《构建之法》第四章和第十七章的问题
    2016012070小学四则运算练习软件项目报告
    有关软件工程的一些问题
    300道随机四则运算小程序(java编写)
  • 原文地址:https://www.cnblogs.com/LQ-double/p/6063581.html
Copyright © 2011-2022 走看看