码迷,mamicode.com
首页 > 其他好文 > 详细

蒟阵P3390 【模板】矩阵快速幂

时间:2019-04-04 20:19:51      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:define   get   修改   height   fine   nbsp   turn   matrix   out   

 

技术图片

技术图片

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<string>
 7 #include<algorithm>
 8 #include<time.h>
 9 using namespace std;
10 #define mod 1000000007
11 #define ll long long 
12 ll read(){
13     ll ans=0;
14     char last= ,ch=getchar();
15     while(ch<0 || ch>9)last=ch,ch=getchar();
16     while(ch>=0 && ch<=9)ans=ans*10+ch-0,ch=getchar();
17     if(last==-)ans=-ans;
18     return ans;
19 }//快读 
20 struct matrix{
21     ll m[105][105];
22 };//定义蒟阵 
23 ll n,k;
24 matrix a,c,e;
25 matrix cheng(matrix x,matrix y)//定义蒟阵乘法 
26 {
27     matrix c;
28     for(ll i=1;i<=n;i++)
29         for(ll j=1;j<=n;j++)
30             c.m[i][j]=0;//初始化0 
31     for(int i=1;i<=n;i++)
32       for(int j=1;j<=n;j++)
33         for(int k=1;k<=n;k++)
34         {
35             c.m[i][j]=c.m[i][j]%mod+x.m[i][k]*y.m[k][j]%mod;//按照定义计算喽 
36         }
37     return c;
38 }
39 matrix pow(matrix x,ll y)//定义蒟阵快速幂(注意要用蒟阵的乘法,其他相同) 
40 {
41     matrix ans=e;
42     while(y)
43     {
44         if(y&1)
45         {
46             ans=cheng(ans,x);
47         }
48         x=cheng(x,x);
49         y>>=1;
50     }
51     return ans;
52 }
53 int main()
54 {
55     n=read(),k=read();
56     for(ll i=1;i<=n;i++)
57         e.m[i][i]=1;//单位蒟阵 
58     for(ll i=1;i<=n;i++)
59         for(ll j=1;j<=n;j++)
60         {
61             a.m[i][j]=read();//读入 
62         }
63     matrix ans=pow(a,k);
64     for(ll i=1;i<=n;i++)
65     {
66         for(ll j=1;j<=n;j++)
67         {
68             cout<<ans.m[i][j]%mod<<" ";
69         }
70         cout<<endl;
71     }    
72     return 0;//结束喽 
73 }

如果要写蒟阵乘法的话,稍微修改一下就可以了:

int main()
{
    for(int i=1;i<=m;i++)
        for(int j=1;i<=n;j++)
        {
            c[i][j]=0;
            for(int k=1;i<=p;k++)
                c[i][j]+=a[i][k]*b[k][j];
        }
 } 

 

蒟阵P3390 【模板】矩阵快速幂

标签:define   get   修改   height   fine   nbsp   turn   matrix   out   

原文地址:https://www.cnblogs.com/lcezych/p/10656705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!