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 <ctype.h>
    #include <cstdio>
    
    typedef long long LL;
    #define Mod 1000000007
    
    void read(LL &x)
    {
        x=0;
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar());
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    }
    LL k,n;
    struct node
    {
        LL a[150][150];
        inline node operator*(const node &b)const
        {
            node c;
            for(LL i=1;i<=n;i++)
            {
                for(LL j=1;j<=n;j++)
                {
                    c.a[i][j]=0;
                    for(LL k=1;k<=n;k++)
                    c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j])%Mod;
                }
            }
            return c;
        }
    }A,ans;
    int main(int argc,char *argv[])
    {
        read(n);
        read(k);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                read(A.a[i][j]);
        ans=A;k--;
        for(;k;k>>=1LL,A=A*A)
            if(k&1) ans=ans*A;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                printf("%d ",ans.a[i][j]);
            printf("
    ");
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    CSS去掉 a 标签点击后出现的虚线框
    AMD 和 CMD的区别
    sublime text常用快捷键
    jsonp详解
    JSON详解
    JS知识总结
    input 单选按钮radio 取消选中(转载)
    koala 编译scss不支持中文解决方案
    Spring事务的传播行为 @Transactional(转)
    Ubuntu下JDK+Tomcat+MySql环境的搭建
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7207555.html
Copyright © 2011-2022 走看看