模板——矩陣快速冪+矩陣乘法
阿新 • • 發佈:2017-09-20
一個 ace 快速 應該 namespace cin ast c++ truct
#include<bits/stdc++.h> using namespace std; const long long P=1e9+7; long long n,m; struct nob{ long long juzhen[105][105]; friend nob operator * (const nob &a,const nob &b){ nob c; for (int i=1; i<=n; i++){ for (int l=1; l<=n; l++){ long long sum=0; for (int k=1; k<=n; k++){ sum+=a.juzhen[i][k]*b.juzhen[k][l]; sum%=P; } c.juzhen[i][l]=sum; } } return c; } }s[100]; nob resite(){ nob a; for (int i=1; i<=n; i++){ for (int l=1; l<=n; l++){ if (i==l) a.juzhen[i][l]=1; else a.juzhen[i][l]=0; } } return a; } nob fastpow(nob x,long long k){ nob ans=resite(); while (k){ if (k&1) ans=x*ans; x=x*x; k>>=1; } return ans; } int main(){ cin>>n>>m; for (int i=1; i<=n; i++){ for (int l=1; l<=n; l++){ cin>>s[1].juzhen[i][l]; } } s[2]=fastpow(s[1],m); for (int i=1; i<=n; i++){ for (int l=1; l<=n; l++){ cout<<s[2].juzhen[i][l]<<" "; } cout<<endl; } return 0; }
感覺是一個極其醜陋而且比較慢的(應該吧,因為看起來比較慢)矩乘。QAQ
模板——矩陣快速冪+矩陣乘法