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<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    const int maxn=100+5;
    inline ll read(){
        register ll x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    ll n,k;
    ll tmp[maxn][maxn];
    struct mat
    {
        ll m[maxn][maxn];
    }a,b;
    mat matmul(mat a,mat b){
        mat t;
        for(register int i=1;i<=n;++i)
        for(register int j=1;j<=n;++j){
            t.m[i][j]=0;
            for(register int k=1;k<=n;++k)
            t.m[i][j]=(t.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
        }
        return t;
    }
    void matpow(ll p){
        while(p){
            if(p&1) a=matmul(a,b);
            b=matmul(b,b);
            p=p>>1;
        }
    }
    int main()
    {
        n=read();k=read();
        for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            a.m[i][j]=read(),b.m[i][j]=a.m[i][j];
        matpow(k-1);
        for(register int i=1;i<=n;++i){
            for(register int j=1;j<=n;++j)
                printf("%lld ",a.m[i][j]);
            printf("
    ");
        }
        return 0;
    }
    欢迎转载,转载请注明出处!
  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/huihao/p/7684254.html
Copyright © 2011-2022 走看看