zoukankan      html  css  js  c++  java
  • UVA 10689 Yet another Number Sequence

    简单矩阵快速幂。

    if(m==1) MOD=10;
    if(m==2) MOD=100;
    if(m==3) MOD=1000;
    if(m==4) MOD=10000;

    剩下的就是矩阵快速幂求斐波那契数列第n项取模

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    long long MOD;
    long long x, y;
    int n,m;
    
    long long mod(long long a, long long b)
    {
        if (a >= 0) return a%b;
        if (abs(a) % b == 0) return 0;
        return (a + b*(abs(a) / b + 1));
    }
    
    struct Matrix
    {
        long long A[5][5];
        int R, C;
        Matrix operator*(Matrix b);
    };
    
    Matrix X, Y, Z;
    
    Matrix Matrix::operator*(Matrix b)
    {
        Matrix c;
        memset(c.A, 0, sizeof(c.A));
        int i, j, k;
        for (i = 1; i <= R; i++)
            for (j = 1; j <= C; j++)
                for (k = 1; k <= C; k++)
                    c.A[i][j] = mod((c.A[i][j] + mod(A[i][k] * b.A[k][j], MOD)), MOD);
        c.R=R; c.C=b.C;
        return c;
    }
    
    void read()
    {
        scanf("%lld%lld%d%d", &x, &y, &n,&m);
        if(m==1) MOD=10;
        if(m==2) MOD=100;
        if(m==3) MOD=1000;
        if(m==4) MOD=10000;
    }
    
    void init()
    {
       // n = n - 1;
        Z.A[1][1] = x, Z.A[1][2] = y; Z.R = 1; Z.C = 2;
        Y.A[1][1] = 1, Y.A[1][2] = 0, Y.A[2][1] = 0, Y.A[2][2] = 1; Y.R = 2; Y.C = 2;
        X.A[1][1] = 0, X.A[1][2] = 1, X.A[2][1] = 1, X.A[2][2] = 1; X.R = 2; X.C = 2;
    }
    
    void work()
    {
        while (n)
        {
            if (n % 2 == 1) Y = Y*X;
            n = n >> 1;
            X = X*X;
        }
        Z = Z*Y;
    
        printf("%lld
    ", mod(Z.A[1][1], MOD));
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            read();
            init();
            work();
        }
        return 0;
    }
  • 相关阅读:
    NOIP2017 D1T2 时间复杂度
    NOIP2017 游记
    NOIP2017 Day-1 模板荟萃
    NOIP2013 货车运输 倍增
    洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
    洛谷2474 [SCOI2008] 天平 差分约束->枚举
    bzoj1270 BeijingWc2008 雷涛的小猫 DP
    poj1061--青蛙的约会--扩展欧几里得
    “整除”的相关
    poj1067--取石子游戏--(神奇的黄金分割比)
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5229075.html
Copyright © 2011-2022 走看看