【模板】矩阵快速幂

来源:互联网 发布:mysql 删除重复的数据 编辑:程序博客网 时间:2024/06/08 00:34

题目链接:https://www.luogu.org/problem/show?pid=3390

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define LL long longusing namespace std; const LL mod=1000000007;int n;struct Matrix{    LL a[105][105];    inline Matrix operator *(const Matrix &b)const    {        Matrix ret;        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)            {                ret.a[i][j]=0;                for(int k=1;k<=n;k++)                    (ret.a[i][j]+=a[i][k]*b.a[k][j])%=mod;                                    }        return ret;    }}a;Matrix Matrix_pow(Matrix a,LL b){    Matrix ret=a,k=a;    b--;    for(;b;b>>=1,k=k*k)        if(b&1) ret=ret*k;    return ret;    }int main(){    LL k;    scanf("%d%lld",&n,&k);    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)            scanf("%lld",&a.a[i][j]);    a=Matrix_pow(a,k);    for (int i=1;i<=n;i++)    {        for (int j=1;j<n;j++) printf("%d ",a.a[i][j]);        printf("%d\n",a.a[i][n]);    }    return 0;}
原创粉丝点击