51nod 1113 矩阵连乘快速幂模板 (对100000007取模)

来源:互联网 发布:java document类 编辑:程序博客网 时间:2024/06/04 00:50

题目:点击打开链接

#include<cstdio>#include<cmath>#include<algorithm>#define ll long long#define M 1000000007using namespace std;const int maxn=105;int N;struct mat{    ll m[maxn][maxn];};mat A,I;void init(){    for(int i=0;i<N;i++)    for(int j=0;j<N;j++){        scanf("%lld",&A.m[i][j]);        A.m[i][j]%=M;        I.m[i][j]=(i==j);    }}mat multi(mat a,mat b){    mat c;    for(int i=0;i<N;i++)    for(int j=0;j<N;j++){            c.m[i][j]=0;            for(int k=0;k<N;k++)                c.m[i][j]+=a.m[i][k]*b.m[k][j]%M;            c.m[i][j]%=M;    }    return c;}mat power(mat A,int k){    mat ans=I,p=A;    while(k){        if(k&1){            ans=multi(ans,p);            k--;        }        k>>=1;        p=multi(p,p);    }    return ans;}int main(){    int k;    scanf("%d%d",&N,&k);    init();    mat ans=power(A,k);    for(int i=0;i<N;i++){        printf("%lld",ans.m[i][0]);        for(int j=1;j<N;j++)            printf(" %lld",ans.m[i][j]);        printf("\n");    }    return 0;}


原创粉丝点击