标签:print sum class bin const amp 矩阵乘法 eof alt
-对于n∗m的矩阵,它的单位矩阵大小为m∗m;对于m∗n的矩阵,它的单位矩阵大小为n∗n
-单位矩阵的元素非0即1,从左上角到右下角的对角线上元素皆为1,其他皆为0
#include<bits/stdc++.h> #define ll long long #define For(i,l,r) for(int i=l;i<=r;i++) using namespace std; const int M=105,p=1e9+7; ll n,k; inline ll read(){ ll f=1,sum=0; char ch=getchar(); while(!isdigit(ch)){if(ch==‘-‘)f=-1;ch=getchar();} while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();} return f*sum; } struct node{ ll a[M][M]; node(){ memset(a,0,sizeof(a)); } inline void build(){For(i,1,n)a[i][i]=1;} }mat,ans; node operator *(const node &x,const node &y){//重载运算符 node z; For(k,1,n){ For(i,1,n){ For(j,1,n){ z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j]%p)%p; } } } return z; } inline void matksm(){ while(k){ if(k&1) ans=ans*mat; mat=mat*mat; k>>=1; } } int main(){ n=read(),k=read(); For(i,1,n){ For(j,1,n){ mat.a[i][j]=read(); } } ans.build(); matksm();//与普通快速幂无异,只是不能写成*= For(i,1,n){ For(j,1,n){ printf("%d ",ans.a[i][j]); } printf("\n"); } return 0; }
标签:print sum class bin const amp 矩阵乘法 eof alt
原文地址:https://www.cnblogs.com/jian-song/p/11622406.html