zoukankan      html  css  js  c++  java
  • HDU

    题意:f[1]=a,f[2]=b,f[i]=f[i-1]+2*f[i-2]+i^4(I>=3),求f[n]%mod

    明显的矩阵快速幂。

    这是我一开始的矩阵

     这是结果的

    还是太年轻了

    struct Mat {
        ll m[7][7];
    };
    
    Mat E;
    
    Mat P;
    
    void init() {
        for (int i = 0; i < 7; i++) E.m[i][i] = 1;
        for (int i = 0; i < 6; i++) P.m[i][i] = 1;
        P.m[1][0] = 1;
        P.m[2][0] = 1;
        P.m[2][1] = 2;
        P.m[2][0] = 1;
        P.m[3][0] = 1;
        P.m[3][1] = P.m[3][2] = 3;
        P.m[4][0] = P.m[5][4] = 1;
        P.m[4][1] = P.m[4][3] = 4;
        P.m[4][2] = 6;
        P.m[5][6] = 2;
        P.m[6][5] = 1;
    }
    
    Mat mul(const Mat& a, const Mat& b) {
        Mat c;
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                c.m[i][j] = 0;
                for (int k = 0; k < 7; k++) c.m[i][j] = (c.m[i][j] + (a.m[i][k] * b.m[k][j]) % MOD) % MOD;
            }
        }
        return c;
    }
    
    Mat quickPower(Mat a, ll b) {
        Mat ans = E;
        Mat base = a;
        while (b) {
            if (b & 1ll) ans = mul(ans, base);
            base = mul(base, base);
            b >>= 1;
        }
        return ans;
    }
    
    int main() {
        init();
        ll n;
        ll a1, a2;
        int T;  
        scanf("%d", &T);
        while (T--) {
            scanf("%lld%lld%lld",&n , &a1, &a2);
            if (n == 1) {
                printf("%lld
    ", a1);  continue;
            }
            else if (n == 2) {
                printf("%lld
    ", a2); continue;
            }
            Mat res = quickPower(P, n - 2);
            ll ans = ((res.m[5][0]*1 + res.m[5][1]*3 + (res.m[5][2]*9)%MOD + (res.m[5][3]*27)%MOD)%MOD + (res.m[5][4] * 81 )%MOD + (res.m[5][5] * (a2))%MOD + (res.m[5][6]* a1)%MOD)%MOD;
            printf("%lld
    ", ans);
            /*
            for (int i = 0; i < 7; i++) {
                for (int j = 0; j < 7; j++) {
                    printf("%lld " ,res.m[i][j]);
                }
                puts("");
            }*/
        }
    }
  • 相关阅读:
    【FJOI2014】【偏导+数学】病毒防护带
    脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
    数据库锁机制
    Clgb动态代理
    乐观锁和悲观锁
    Jstl自定义标签
    orcale应用
    Ajax
    AOP
    Git 配置过程
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13236075.html
Copyright © 2011-2022 走看看