• 矩阵快速幂模板


    题目描述

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

    这里写代码片
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define LL long long
    
    using namespace std;
    
    const LL mod=1000000007;
    const int N=201;
    LL k;
    int n;
    
    struct node{
        LL m[101][101];
        node operator * (const node &a) const
        {
            node ans;
            for (int i=1;i<=n;i++)
                for (int j=1;j<=n;j++)
                {
                    ans.m[i][j]=0;
                    for (int k=1;k<=n;k++)
                        ans.m[i][j]=(ans.m[i][j]+(LL)m[i][k]*a.m[k][j])%mod;
                    //这给我们一个启示,取%时不能偷懒,还是要一步一步的进行 
                }
            return ans;        
        }
        void clear()
        {
            memset(m,0,sizeof(m));
        }
        node KSM(LL k)
        {
            k--;
            node ans=(*this),a=(*this);
            while (k)
            {
                if (k&1)
                   ans=ans*a;
                a=a*a;
                k>>=1;
            }
            return ans;  
        }
    };
    
    int main()
    {
        node m,ans;
        scanf("%d%lld",&n,&k);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                scanf("%lld",&m.m[i][j]);
        ans=m.KSM(k);
        for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++)
                printf("%lld ",ans.m[i][j]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    钾 动态规划
    镁 细节
    锌 填坑计划
    钠 GZY整理贪心
    javascript+Java 实现MD5加密登录密码
    FCKeditor2.6.4图片上传,中文名乱码,红叉各种问题解决
    Java 随机生成验证码,支持大小写字母、数字、随机字体
    BI BI系统监控
    使用ETL控件还是存储过程
    fsync与数据库日志刷新
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673604.html
Copyright © 2020-2023  润新知