zoukankan      html  css  js  c++  java
  • 广工赛-hdu6470矩阵快速幂

    递推时把(n+1)^3拆开 构造矩阵即可

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define mod 123456789
    struct Mat{
        ll m[10][10];
        Mat(){memset(m,0,sizeof m);}
    }A; 
    ll n,F[13];
    void mul(Mat A,ll F[13]){
        ll B[13]={};
        for(int i=0;i<6;i++)
            for(int j=0;j<6;j++)
                B[i]=(B[i]+A.m[i][j]*F[j]%mod)%mod;
        memcpy(F,B,sizeof B);
    }
    void mulself(Mat & A,Mat B){
        Mat C;
        for(int i=0;i<6;i++)
            for(int j=0;j<6;j++)
                for(int k=0;k<6;k++)
                    C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j]%mod)%mod;
        memcpy(A.m,C.m,sizeof C.m);
    }
    int main(){
        int T;
        cin>>T;    
        while(T--){
            F[0]=2,F[1]=1,F[2]=27,F[3]=9,F[4]=3,F[5]=1; 
            memset(A.m,0,sizeof A.m);
            A.m[1][0]=1;
            A.m[0][0]=1;A.m[0][1]=2;A.m[0][2]=1;
            A.m[2][2]=1;A.m[2][3]=3;A.m[2][4]=3;A.m[2][5]=1;
            A.m[3][3]=1;A.m[3][4]=2;A.m[3][5]=1;
            A.m[4][4]=1;A.m[4][5]=1;
            A.m[5][5]=1;
            cin>>n;
            n-=2;
            while(n){
                if(n%2)
                    mul(A,F);
                mulself(A,A);
                n>>=1;
            }
            cout<<F[0]%mod<<'
    ';
        }    
    }
  • 相关阅读:
    Day Six(Beta)
    Day Five (beta)
    Day Four(Beta)
    Day Three(Beta)
    Day Two(Beta)
    Day One(Beta)
    项目冲刺——总结
    beta版本贡献率
    软件工程实践总结
    团队作业--Beta版本冲刺
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10556084.html
Copyright © 2011-2022 走看看