zoukankan      html  css  js  c++  java
  • BJFU 1440 fudq的ACM

    矩阵快速幂

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int Nmax = 25;
     5 const int INF =1e9;
     6 const int mod=1000000007;
     7  
     8 long long n;
     9 int error;
    10 struct Matrix
    11 {
    12     int n,m;
    13     long long map[Nmax][Nmax];
    14     Matrix(int x,int y)
    15     {
    16         n=x;m=y;
    17         for(int i=1;i<=n;i++)
    18             for(int j=1;j<=m;j++)
    19                 map[i][j]=0;
    20     }
    21     Matrix operator * (const Matrix b)
    22     {
    23         Matrix c(n,b.m);
    24         if(m==b.n)
    25         {
    26             for(int i=1;i<=c.n;i++)
    27                 for(int j=1;j<=c.m;j++)
    28                     for(int k=1;k<=m;k++)
    29                         c.map[i][j]=(c.map[i][j]+(map[i][k]*b.map[k][j])%mod)%mod;
    30             return c;
    31         }
    32         printf("error!!!!!!!!!!!!!!
    ");   
    33     }
    34 };
    35  
    36 Matrix get(long long n)
    37 {
    38     Matrix base(2,2);
    39     base.map[1][1]=2;
    40     base.map[1][2]=2;
    41     base.map[2][1]=1;
    42     base.map[2][2]=0;
    43     Matrix ans(2,2);
    44     ans.map[1][1]=1;
    45     ans.map[1][2]=0;
    46     ans.map[2][1]=0;
    47     ans.map[2][2]=1;
    48      
    49     while(n>0)
    50     {
    51         if(n & 1)
    52             ans=ans*base;
    53         base=base*base;
    54         n>>=1;
    55     }
    56      
    57     return ans;
    58 }
    59  
    60  
    61  
    62 int main()
    63 {
    64     //freopen("bjfu.in","r",stdin);
    65     Matrix base(2,1);  
    66     base.map[1][1]=8;
    67     base.map[2][1]=3;
    68      
    69     while(scanf("%I64d",&n)==1)
    70     {
    71         if(n>=3)
    72         {
    73             Matrix ans=get(n-2);
    74             ans=ans*base;
    75             printf("%I64d
    ",ans.map[1][1]);
    76         }
    77         else
    78         {
    79             printf("%I64d
    ",base.map[3-n][1]);
    80         }
    81     }
    82     return 0;
    83 }
  • 相关阅读:
    Simulink模块之Zero-Order Hold和Unit Delay的区别
    芯片电源引脚的去耦电容
    STM32中电源引脚
    Simulink:模块参数初始化
    工作笔记1
    至少清楚知道兼容IE8 ie9 ;持续更新
    FROM_UNIXTIME/CONCAT
    采集文章
    文件上传类(引用)
    php文件相关操作
  • 原文地址:https://www.cnblogs.com/BBBob/p/5931602.html
Copyright © 2011-2022 走看看