zoukankan      html  css  js  c++  java
  • hdu 4602 Partition(快速幂)

    推公式+快速幂

    公式有很多形式,可以写矩阵

    1、前n-1项和的两倍+2的(n-2)次方,这个写不出啥

    2、递推式:f(n)=2*f(n-1)+2的(n-3)次方

    3、公式:2的(n-k-2)次方*(n-k+1)+2的(n-k-1)

    代码什么的看他的吧http://blog.csdn.net/liuledidai/article/details/9449301

    第一次写矩阵就不献丑了

     1 #include<stdio.h>
     2 
     3 const int mod=1e9+7;
     4 
     5 #define LL __int64
     6 
     7 LL p[2][2];
     8 LL q[1][2];
     9 
    10 LL bb(LL a,LL b,LL c,LL d)
    11 {
    12     return (a*c%mod+b*d%mod)%mod;
    13 }
    14 
    15 LL aa(int n)
    16 {
    17     LL a,b,c,d;
    18     LL x,y;
    19     p[0][0]=2;
    20     p[0][1]=0;
    21     p[1][0]=1;
    22     p[1][1]=2;
    23 
    24     q[0][0]=2;
    25     q[0][1]=1;
    26     while(n)
    27     {
    28         a=p[0][0];b=p[0][1];c=p[1][0];d=p[1][1];
    29         x=q[0][0];y=q[0][1];
    30         if(n&1){
    31             q[0][0]=bb(x,y,a,c);
    32             q[0][1]=bb(x,y,b,d);
    33         }
    34         p[0][0]=bb(a,b,a,c);
    35         p[0][1]=bb(a,b,b,d);
    36         p[1][0]=bb(c,d,a,c);
    37         p[1][1]=bb(c,d,b,d);
    38 
    39         n>>=1;
    40     }
    41     return (q[0][0]%mod);
    42 }
    43 
    44 int main()
    45 {
    46     int T,n,m;
    47     scanf("%d",&T);
    48 
    49     while(T--)
    50     {
    51         scanf("%d%d",&n,&m);
    52         if(n<m)
    53             printf("0
    ");
    54         else if(n-m==0)
    55             printf("1
    ");
    56         else if(n-m==1)
    57             printf("2
    ");
    58         else 
    59             printf("%I64d
    ",aa(n-m-1));
    60     }
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    继承
    面向对象
    数据库的数据操作
    数据库数据类型以及建库语句
    第一天
    继承与多态
    C#面向对象——对象成员、方法重载、引用类库等
    C#面向对象初步
    SQL2008知识回顾
    C#知识回顾
  • 原文地址:https://www.cnblogs.com/zstu-abc/p/3219237.html
Copyright © 2011-2022 走看看