矩阵快速幂 洛谷P3390

xiaoxiao2021-02-28  63

#include<bits/stdc++.h> #include<iostream> const int b = 1000000000+7; long long n,a[200][200],s[200][200],tmp[200][200]; long long m; int i,j,k; int main(){ std::cin>>n>>m; for (i=1;i<=n;i++) for (j=1;j<=n;j++){ scanf("%lld",&a[i][j]); s[i][j]=a[i][j]; } m--; while (m){ if (m%2) { memset(tmp,0,sizeof(tmp)); for (i=1;i<=n;i++) for (j=1;j<=n;j++) for (k=1;k<=n;k++){ tmp[i][j]+=s[i][k]*a[k][j]; tmp[i][j]%=b; } for (i=1;i<=n;i++) for (j=1;j<=n;j++) s[i][j]=tmp[i][j]; } memset(tmp,0,sizeof(tmp)); for (i=1;i<=n;i++) for (j=1;j<=n;j++) for (k=1;k<=n;k++){ tmp[i][j]+=a[i][k]*a[k][j]; tmp[i][j]%=b; } for (i=1;i<=n;i++) for (j=1;j<=n;j++) a[i][j]=tmp[i][j]; m/=2; } for (i=1;i<=n;i++) for (j=1;j<=n;j++) printf("%lld%c",s[i][j],j==n?'\n':' '); return 0; }交了6遍才过,原因是源代码竟然没改!
转载请注明原文地址: https://www.6miu.com/read-52578.html

最新回复(0)