• 洛谷P3390 【模板】矩阵快速幂


    传送门

    从今天开始学习矩阵快速幂.jpg

     1 //minamoto
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define ll long long
     6 using namespace std;
     7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
     8 char buf[1<<21],*p1=buf,*p2=buf;
     9 inline ll read(){
    10     #define num ch-'0'
    11     char ch;bool flag=0;ll res;
    12     while(!isdigit(ch=getc()))
    13     (ch=='-')&&(flag=true);
    14     for(res=num;isdigit(ch=getc());res=res*10+num);
    15     (flag)&&(res=-res);
    16     #undef num
    17     return res;
    18 }
    19 const int N=105,mod=1e9+7;
    20 ll n,k;
    21 struct Matrix{
    22     int n;ll g[N][N];
    23     Matrix(){memset(g,0,sizeof(g));}
    24     inline Matrix operator *(Matrix b){
    25         Matrix ans;
    26         for(int i=1;i<=n;++i)
    27         for(int j=1;j<=n;++j)
    28         for(int k=1;k<=n;++k)
    29         (ans.g[i][j]+=g[i][k]*b.g[k][j])%=mod;
    30         ans.n=n;
    31         return ans;
    32     }
    33 }x,res;
    34 inline Matrix qpow(Matrix a,ll b){
    35     while(b){
    36         if(b&1) res=res*a;
    37         a=a*a,b>>=1;
    38     }
    39     return res;
    40 }
    41 inline void print(Matrix x){
    42     int n=x.n;
    43     for(int i=1;i<=n;++i){
    44         for(int j=1;j<=n;++j) printf("%d ",x.g[i][j]);
    45         putchar(10);
    46     }
    47 }
    48 int main(){
    49     //freopen("testdata.in","r",stdin);
    50     n=read(),k=read();
    51     x.n=n;
    52     for(int i=1;i<=n;++i)
    53     for(int j=1;j<=n;++j)
    54     x.g[i][j]=read();
    55     for(int i=1;i<=n;++i) res.g[i][i]=1;res.n=n;
    56     print(qpow(x,k));
    57     return 0;
    58 }
  • 相关阅读:
    13.ng-value
    Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
    PHP完整的AES加解密算法使用及例子(256位)
    常用对称加密算法(DES/AES)类(PHP)
    随机字符串生成算法
    JAVA实现AES加密
    Base64的好处
    什么是VC、PE、LP、GP?
    mysql update操作
    iOS开发:用DES对字符串加解密
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/9593670.html
Copyright © 2020-2023  润新知