zoukankan      html  css  js  c++  java
  • Luogu 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 算法:矩阵快速幂

     1 #include <cstdio>
     2 #include <iostream>
     3 using namespace std;
     4 typedef long long ll;
     5 ll x[999][999];
     6 ll ans[999][999];
     7 ll dx[999][999];
     8 const int p=1e9+7;
     9 inline void anscf(int n)
    10 {
    11     for(int i=1;i<=n;i++)
    12      for(int j=1;j<=n;j++)
    13       dx[i][j]=ans[i][j],ans[i][j]=0;
    14 
    15     for(int i=1;i<=n;i++)
    16      for(int j=1;j<=n;j++)
    17       for(int k=1;k<=n;k++)
    18        ans[i][j]=(ans[i][j]+(x[i][k]*dx[k][j])%p)%p;
    19 }
    20 inline void xcf(int n)
    21 {
    22     for(int i=1;i<=n;i++)
    23      for(int j=1;j<=n;j++)
    24       dx[i][j]=x[i][j],x[i][j]=0;
    25 
    26     for(int i=1;i<=n;i++)
    27      for(int j=1;j<=n;j++)
    28       for(int k=1;k<=n;k++)
    29        x[i][j]=(x[i][j]+(dx[i][k]*dx[k][j])%p)%p;
    30 }
    31 inline void fastpow(ll n,ll w)
    32 {
    33     while(w)
    34     {
    35         if(w%2==1) anscf(n);
    36         w/=2;
    37         xcf(n);
    38     }
    39 }
    40 int main()
    41 {
    42     ll n,k;
    43     scanf("%lld%lld",&n,&k);
    44     for(int i=1;i<=n;i++)
    45      for(int j=1;j<=n;j++)
    46       scanf("%d",&x[i][j]),ans[i][j]=x[i][j];
    47     fastpow(n,k-1);
    48     for(int i=1;i<=n;i++)
    49     {
    50       for(int j=1;j<=n;j++)
    51        printf("%lld ",ans[i][j]);
    52       puts("");
    53     }
    54 }
  • 相关阅读:
    类与继承
    闭包、原型链和继承
    ajax(下)和“承诺”
    ajax(上)
    Ubuntu电源键软关机设置
    金老师语录摘要(七)
    金老师语录摘要(六)
    金老师语录摘要(四)
    金老师语录摘要(三)
    金老师语录摘要(二)
  • 原文地址:https://www.cnblogs.com/Hammer-cwz-77/p/7419951.html
Copyright © 2011-2022 走看看