zoukankan      html  css  js  c++  java
  • hdu 5950

    题意:t组,输入n,a,b;f(1)=a;f(2)=b;求f(n);f(n)=f(n-1)+2*f(n-2)+n^4;

    思路:肯定是矩阵快速幂啦,(n+1)^4=n^4+4n^3+6n^2+4n+1,所以为7*7的矩阵,{1,n,n^2,n^3,n^4,f(n),f(n-1)}*A={1,(n+1)^2,(n+2)^3,(n+1)^4,f(n+1),f(n)},

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 #include <cmath>
     7 
     8  using namespace std;
     9  const long long mod = 2147493647;
    10  struct prog
    11  {
    12      long long a[8][8];
    13  };
    14  prog s,B;
    15  prog matrixmul(prog a,prog b)
    16  {
    17     prog c;
    18      for(int i=1;i<8;++i)for(int j=1;j<8;++j)
    19     {
    20        c.a[i][j]=0;
    21        for(int k=1;k<8;k++)
    22             c.a[i][j]+=(a.a[i][k]*b.a[k][j])%mod;
    23          c.a[i][j]%=mod;
    24    }
    25      return c;
    26  }
    27  prog mul(prog s,int k)
    28 {
    29     prog ans;
    30      for(int i=1;i<8;++i)for(int j=1;j<8;++j) ans.a[i][j]=(i==j)?1:0;
    31     while(k){
    32         if(k&1)
    33             ans=matrixmul(ans,s);
    34         k>>=1;
    35        s=matrixmul(s,s);
    36     }
    37      return ans;
    38  }
    39  int main()
    40  {
    41      int n,t,a,b;
    42     for(scanf("%d",&t);t--;){
    43         scanf("%d %d %d",&n,&a,&b);
    44        if(n==1){printf("%lld
    ",a%mod);continue;}
    45        if(n==2){printf("%lld
    ",b%mod);continue;}
    46         if(n==3){printf("%lld
    ",(81+2*a%mod+b%mod)%mod);continue;}
    47        n-=2;
    48        for(int i=1;i<=7;++i)for(int j=1;j<=7;++j) s.a[i][j]=0,B.a[i][j]=0;
    49         for(int i=1; i<=5; i++)s.a[i][1]=1;
    50          for(int i=2; i<=5; i++)s.a[i][2]=i-1;
    51         s.a[3][3]=1;s.a[4][3]=3;s.a[5][3]=6;
    52         s.a[4][4]=1;s.a[5][4]=4;
    53         s.a[5][5]=1;s.a[6][5]=1;
    54          s.a[6][6]=1;s.a[7][6]=1;
    55          s.a[6][7]=2;
    56         B.a[1][1]=1;B.a[2][1]=3;B.a[3][1]=9;B.a[4][1]=27;B.a[5][1]=81;B.a[6][1]=b;B.a[7][1]=a;
    57         s=mul(s,n);
    58          s=matrixmul(s,B);
    59         printf("%lld
    ",s.a[6][1]%mod);
    60     }
    61      return 0;
    62  }


    {f(n),f(n1),n4,n3,n2,n,1}A={f(n+1),f(n),(n+1)4,(n+1)3,(n+1)2,(n+1),1}

    f(1)=a,f(2)=b

  • 相关阅读:
    让photoshop cc 支持 webp格式
    DedeCMS文章页去img图片width和height属性
    DedeCMS提交自定义表单加入验证码功能
    php session的操作
    使用jQuery,实现完美的表单异步提交
    Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程
    BT之下拉菜单
    慕课网上的Bootstrap学习(二)
    表单控件状态(禁用状态)
    在慕课学习Bootstrap
  • 原文地址:https://www.cnblogs.com/hhxj/p/6954213.html
Copyright © 2011-2022 走看看