• 洛谷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 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #define LL long long
     8 using namespace std;
     9 const int mod=1e9+7;
    10 const int mxn=105;
    11 int read(){
    12     int x=0,f=1;char ch=getchar();
    13     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    14     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    15     return x*f;
    16 }
    17 int n;
    18 struct matrix{
    19     int s[mxn][mxn];
    20     matrix(){memset(s,0,sizeof s);}
    21 };
    22 matrix operator * (const matrix a,const matrix b){
    23     matrix c;
    24     for(int i=1;i<=n;i++)
    25      for(int j=1;j<=n;j++)
    26       for(int k=1;k<=n;k++)
    27           c.s[i][j]=((LL)c.s[i][j]+(LL)a.s[i][k]*b.s[k][j])%mod;
    28     return c;
    29 }
    30 LL k;
    31 matrix a;
    32 int main(){
    33     int i,j;
    34     scanf("%d%lld",&n,&k);
    35     for(i=1;i<=n;i++)
    36      for(j=1;j<=n;j++)
    37       a.s[i][j]=read();
    38     matrix ans=a;
    39     k--;
    40     while(k){
    41         if(k&1)ans=ans*a;
    42         k>>=1;
    43         a=a*a;
    44     }
    45     for(i=1;i<=n;i++){
    46         for(j=1;j<=n;j++){
    47             printf("%d ",ans.s[i][j]);
    48         }
    49         printf("
    ");
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    获取<input type="checkbox" >控件的checked值
    网站IIS部署及调试
    winform窗体全屏实现
    ComBox控件的使用
    在vs2005项目中,将.sln文件和.suo文件放在一个独立的文件夹内
    .NET面试题整理
    《url重写——更友好的网站url设计》
    char、varchar、nvarchar三者间的区别
    操作符"??"的用法
    Maven 学习笔记(三)
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6020014.html
Copyright © 2020-2023  润新知